home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Animacje, filmy i prezentacje / Edytory i konwertery filmow / Windows Media Encoder 9 PL / WMEncoder.exe / RCDATA / CABINET / WMEncoder.msi / WMCmd.vbs < prev    next >
Text File  |  2002-12-11  |  108KB  |  3,572 lines

  1. 'The build number is 9.00.2980
  2. '*****************************************************************************
  3. '
  4. ' Microsoft Windows Media
  5. ' Copyright (C) Microsoft Corporation. All rights reserved.
  6. '
  7. ' FileName:            WMCMD.VBS
  8. '
  9. ' Abstract:            Windows Media Command Line Script Utility
  10. '                      Use Cscript.exe wmcmd.vbs /? for Help
  11. '
  12. '*****************************************************************************
  13.  
  14. Option Explicit
  15.  
  16. ' Check to see if script is run within cscript host.
  17. if instr( LCase(WScript.Fullname),"cscript.exe" ) = 0 then
  18.     WshShell.Popup "This script must be run using cscript.exe from a command window." , 0 , "Windows Media Encoder Command Script" , 64
  19.     WScript.Quit()
  20. end if
  21.  
  22. ' These variables are part of encoder idl. However vbs cannot use them directly. So these are redefined
  23. dim WMENC_ENCODER_STARTING
  24. dim WMENC_ENCODER_RUNNING
  25. dim WMENC_ENCODER_PAUSED
  26. dim WMENC_ENCODER_STOPPING
  27. dim WMENC_ENCODER_STOPPED
  28. dim WMENC_ENCODER_END_PREPROCESS
  29.  
  30. dim WMENC_ARCHIVE_LOCAL
  31. dim WMENC_ARCHIVE_RUNNING
  32. dim WMENC_ARCHIVE_PAUSED
  33. dim WMENC_ARCHIVE_STOPPED
  34.  
  35. dim WMENC_AUDIO
  36. dim WMENC_VIDEO
  37. dim WMENC_SCRIPT
  38. dim WMENC_FILETRANSFER
  39.  
  40. dim WMENC_SOURCE_START
  41. dim WMENC_SOURCE_STOP
  42. dim WMENC_SOURCE_PREPARE
  43. dim WMENC_SOURCE_UNPREPARE
  44. dim WMENC_START_FILETRANSFER
  45. dim WMENC_STOP_FILETRANSFER
  46.  
  47. dim WMENC_PROTOCOL_HTTP
  48. dim WMENC_PROTOCOL_PUSH_DISTRIBUTION
  49.  
  50. dim WMENC_PVM_NONE
  51. dim WMENC_PVM_PEAK
  52. dim WMENC_PVM_UNCONSTRAINED
  53. dim WMENC_PVM_BITRATE_BASED
  54.  
  55. dim WMA9STD_FOURCC
  56. dim WMA9PRO_FOURCC
  57. dim WMA9LSL_FOURCC
  58. dim WMSPEECH_FOURCC
  59. dim PCM_FOURCC
  60.  
  61. dim WMV7_FOURCC
  62. dim WMV8_FOURCC
  63. dim WMV9_FOURCC
  64. dim WMS9_FOURCC
  65. dim MP41_FOURCC
  66. dim UNCOMP_FOURCC
  67.  
  68. dim WMA9STD
  69. dim WMA9PRO
  70. dim WMA9LSL
  71. dim WMSPEECH
  72. dim PCM
  73.  
  74. dim WMV7
  75. dim WMV8
  76. dim WMV9
  77. dim WMS9
  78. dim MP41
  79. dim UNCOMP
  80.  
  81. dim WMENC_CONTENT_ONE_AUDIO
  82. dim WMENC_CONTENT_ONE_VIDEO
  83. dim WMENC_CONTENT_ONE_AUDIO_ONE_VIDEO
  84.  
  85. dim WMENC_VIDEO_STANDARD
  86. dim WMENC_VIDEO_DEINTERLACE
  87. dim WMENC_VIDEO_INVERSETELECINE
  88. dim WMENC_VIDEO_PROCESS_INTERLACED
  89. dim WMENC_VIDEO_TELECINE_AUTO
  90. dim WMENC_VIDEO_TELECINE_AA_TOP
  91. dim WMENC_VIDEO_TELECINE_BB_TOP
  92. dim WMENC_VIDEO_TELECINE_BC_TOP
  93. dim WMENC_VIDEO_TELECINE_CD_TOP
  94. dim WMENC_VIDEO_TELECINE_DD_TOP
  95. dim WMENC_VIDEO_TELECINE_AA_BOTTOM
  96. dim WMENC_VIDEO_TELECINE_BB_BOTTOM
  97. dim WMENC_VIDEO_TELECINE_BC_BOTTOM
  98. dim WMENC_VIDEO_TELECINE_CD_BOTTOM
  99. dim WMENC_VIDEO_TELECINE_DD_BOTTOM
  100. dim WMENC_VIDEO_INTERLACED_AUTO
  101. dim WMENC_VIDEO_INTERLACED_TOP_FIRST
  102. dim WMENC_VIDEO_INTERLACED_BOTTOM_FIRST
  103. dim WMENC_PIXELFORMAT_IYUV
  104. dim WMENC_PIXELFORMAT_I420
  105. dim WMENC_PIXELFORMAT_YV12
  106. dim WMENC_PIXELFORMAT_YUY2
  107. dim WMENC_PIXELFORMAT_UYVY
  108. dim WMENC_PIXELFORMAT_YVYU
  109. dim WMENC_PIXELFORMAT_YVU9
  110. dim WMENC_PIXELFORMAT_RGB24
  111. dim WMENC_PIXELFORMAT_RGB32
  112. dim WMENC_PIXELFORMAT_RGB555
  113. dim WMENC_PIXELFORMAT_RGB565
  114. dim WMENC_PIXELFORMAT_RGB8
  115.  
  116. WMENC_ENCODER_STARTING = 1
  117. WMENC_ENCODER_RUNNING = 2
  118. WMENC_ENCODER_PAUSED = 3
  119. WMENC_ENCODER_STOPPING = 4
  120. WMENC_ENCODER_STOPPED = 5
  121. WMENC_ENCODER_END_PREPROCESS = 6
  122.  
  123. WMENC_ARCHIVE_LOCAL = 1
  124.  
  125. WMENC_ARCHIVE_RUNNING = 1
  126. WMENC_ARCHIVE_PAUSED = 2
  127. WMENC_ARCHIVE_STOPPED = 3
  128.  
  129. WMENC_AUDIO = 1
  130. WMENC_VIDEO = 2
  131. WMENC_SCRIPT = 4
  132. WMENC_FILETRANSFER = 8
  133.  
  134. WMENC_SOURCE_START = 1
  135. WMENC_SOURCE_STOP = 2
  136. WMENC_SOURCE_PREPARE = 3
  137. WMENC_SOURCE_UNPREPARE = 4
  138. WMENC_START_FILETRANSFER = 5
  139. WMENC_STOP_FILETRANSFER = 6
  140.  
  141. WMENC_PROTOCOL_HTTP = 1
  142. WMENC_PROTOCOL_PUSH_DISTRIBUTION = 2
  143.  
  144. WMENC_PVM_NONE = 1
  145. WMENC_PVM_PEAK = 2
  146. WMENC_PVM_UNCONSTRAINED = 3
  147. WMENC_PVM_BITRATE_BASED = 4
  148.  
  149. WMA9STD_FOURCC = 353
  150. WMA9PRO_FOURCC = 354
  151. WMA9LSL_FOURCC = 355
  152. WMSPEECH_FOURCC = 10
  153. PCM_FOURCC = 0
  154.  
  155. WMV7_FOURCC = 827739479
  156. WMV8_FOURCC = 844516695
  157. WMV9_FOURCC = 861293911
  158. WMS9_FOURCC = 844321613
  159. MP41_FOURCC = 1395937357
  160. UNCOMP_FOURCC = 0
  161.  
  162. WMA9STD = "WMA9STD"
  163. WMA9PRO = "WMA9PRO"
  164. WMA9LSL = "WMA9LSL"
  165. WMSPEECH = "WMSP9"
  166. PCM = "PCM"
  167.  
  168. WMV7 = "WMV7"
  169. WMV8 = "WMV8"
  170. WMV9 = "WMV9"
  171. WMS9 = "WMS9"
  172. MP41 = "MP41"
  173. UNCOMP = "UNCOMP"
  174.  
  175. WMENC_CONTENT_ONE_AUDIO = 1
  176. WMENC_CONTENT_ONE_VIDEO = 16
  177. WMENC_CONTENT_ONE_AUDIO_ONE_VIDEO = 17
  178.  
  179. WMENC_VIDEO_STANDARD = 1
  180. WMENC_VIDEO_DEINTERLACE = 2
  181. WMENC_VIDEO_INVERSETELECINE = 3
  182. WMENC_VIDEO_PROCESS_INTERLACED = 4
  183. WMENC_VIDEO_TELECINE_AA_TOP = &H23
  184. WMENC_VIDEO_TELECINE_BB_TOP = &H33
  185. WMENC_VIDEO_TELECINE_BC_TOP = &H43
  186. WMENC_VIDEO_TELECINE_CD_TOP = &H53
  187. WMENC_VIDEO_TELECINE_DD_TOP = &H63
  188. WMENC_VIDEO_TELECINE_AA_BOTTOM = &H73
  189. WMENC_VIDEO_TELECINE_BB_BOTTOM = &H83
  190. WMENC_VIDEO_TELECINE_BC_BOTTOM = &H93
  191. WMENC_VIDEO_TELECINE_CD_BOTTOM = &HA3
  192. WMENC_VIDEO_TELECINE_DD_BOTTOM = &HB3
  193. WMENC_VIDEO_INTERLACED_AUTO = 4
  194. WMENC_VIDEO_INTERLACED_TOP_FIRST = &H2004
  195. WMENC_VIDEO_INTERLACED_BOTTOM_FIRST = &H3004
  196.  
  197. WMENC_PIXELFORMAT_IYUV = &H56555949
  198. WMENC_PIXELFORMAT_I420 = &H30323449
  199. WMENC_PIXELFORMAT_YV12 = &H32315659
  200. WMENC_PIXELFORMAT_YUY2 = &H32595559
  201. WMENC_PIXELFORMAT_UYVY = &H59565955
  202. WMENC_PIXELFORMAT_YVYU = &H55595659
  203. WMENC_PIXELFORMAT_YVU9 = &H39555659
  204. WMENC_PIXELFORMAT_RGB24 = &HE436EB7D
  205. WMENC_PIXELFORMAT_RGB32 = &HE436EB7E
  206. WMENC_PIXELFORMAT_RGB555 = &HE436EB7C
  207. WMENC_PIXELFORMAT_RGB565 = &HE436EB7B
  208. WMENC_PIXELFORMAT_RGB8 = &HE436EB7A
  209.  
  210. dim g_strInput
  211. dim g_strOutput
  212. dim g_strOutputString
  213. dim g_intSessionType
  214. dim g_strProfile
  215. dim g_strTitle
  216. dim g_strAuthor
  217. dim g_strCopyright
  218. dim g_strDescription
  219. dim g_strRating
  220. dim g_strWMEFile
  221. dim g_strProfileSave
  222. dim g_strProfileLoad
  223.  
  224. dim g_intAudioDevice
  225. dim g_intVideoDevice
  226. dim g_intProfile
  227. dim g_intBroadcast
  228. dim g_strPushServer
  229. dim g_strPublishingPoint
  230. dim g_strPushTemplate
  231. dim g_intMarkInTime
  232. dim g_intMarkOutTime
  233. dim g_intDuration
  234. dim g_intVerbose
  235.  
  236. dim g_objEncoder
  237. dim g_objSourceGroup
  238. dim g_objAudioSource
  239. dim g_objVideoSource
  240. dim g_objProfile
  241. dim g_objFileSystem
  242.  
  243. dim g_blnEncoderStarted
  244. dim g_blnEndPreProcess
  245. dim g_blnEncoderStopped
  246. dim g_intErrorCode
  247. dim g_intRunningSource
  248. dim g_blnDevice
  249. dim g_blnAudioOnly
  250. dim g_blnVideoOnly
  251. dim g_blnSilent
  252.  
  253. dim g_intAudioVBRMode
  254. dim g_strAudioCodec
  255. dim g_strAudioSetting
  256. dim g_intAudioPeakBitrate
  257. dim g_intAudioPeakBuffer
  258. dim g_intAudioSpeechContent
  259. dim g_strAudioSpeechEdl
  260. dim g_intAudioSurroundMix
  261. dim g_intAudioCenterMix
  262. dim g_intAudioLEFMix
  263. dim g_strAudioCodecName
  264.  
  265. dim g_intVideoVBRMode
  266. dim g_strVideoCodec
  267. dim g_intVideoBitrate
  268. dim g_intVideoWidth
  269. dim g_intVideoHeight
  270. dim g_intVideoFramerate
  271. dim g_intVideoKeydist
  272. dim g_intVideoBuffer
  273. dim g_intVideoQuality
  274. dim g_intVideoPeakBitrate
  275. dim g_intVideoPeakBuffer
  276. dim g_intVideoPreprocess
  277. dim g_strPixelFormat
  278. dim g_intPixelAspectRatioX
  279. dim g_intPixelAspectRatioY
  280. dim g_intVideoPerformance
  281. dim g_strVideoCodecName
  282. dim g_strVideoDevConf
  283. dim g_intMaxPacketSize
  284. dim g_intMinPacketSize
  285.  
  286. dim i
  287. dim j
  288. dim g_blnCreateCustomProfile
  289.  
  290. dim g_tStartTime
  291. dim g_tStopTime
  292.  
  293. dim g_intClipLeft
  294. dim g_intClipRight
  295. dim g_intClipTop
  296. dim g_intClipBottom
  297.  
  298. g_strInput = ""
  299. g_strOutput = ""
  300. g_strOutputString = ""
  301. g_intSessionType = WMENC_CONTENT_ONE_AUDIO
  302. g_strProfile = ""
  303. g_strTitle = ""
  304. g_strAuthor = ""
  305. g_strCopyright = ""
  306. g_strDescription = ""
  307. g_strRating = ""
  308. g_strWMEFile = ""
  309. g_strProfileSave = ""
  310. g_strProfileLoad = ""
  311. g_strProfile = ""
  312.  
  313. g_intAudioDevice = -1
  314. g_intVideoDevice = -1
  315. g_intProfile = -1
  316. g_intBroadcast = -1
  317. g_strPushServer = ""
  318. g_strPublishingPoint = ""
  319. g_strPushTemplate = ""
  320. g_intMarkInTime = -1
  321. g_intMarkOutTime = -1
  322. g_intDuration = -1
  323. g_intVerbose = 2
  324.  
  325. g_blnEncoderStarted = false
  326. g_blnEncoderStopped = false
  327. g_blnEndPreProcess = false
  328. g_blnDevice = false
  329. g_intErrorCode = 0
  330. g_intRunningSource = 0
  331. g_blnAudioOnly = false
  332. g_blnVideoOnly = false
  333.  
  334. g_intAudioVBRMode = -1
  335. g_strAudioCodec = ""
  336. g_strAudioSetting = ""
  337. g_intAudioPeakBitrate = -1
  338. g_intAudioPeakBuffer = -1
  339. g_intAudioSpeechContent = -1
  340. g_strAudioSpeechEdl = ""
  341. g_intAudioSurroundMix = -1
  342. g_intAudioCenterMix = -1
  343. g_intAudioLEFMix = -1
  344. g_strAudioCodecName = ""
  345.  
  346. g_intVideoVBRMode = -1
  347. g_strVideoCodec = ""
  348. g_intVideoBitrate = -1
  349. g_intVideoWidth = -1
  350. g_intVideoHeight = -1
  351. g_intVideoFramerate = -1
  352. g_intVideoKeydist = -1
  353. g_intVideoBuffer = -1
  354. g_intVideoQuality = -1
  355. g_intVideoPeakBitrate = -1
  356. g_intVideoPeakBuffer = -1
  357. g_intVideoPreprocess = -1
  358. g_strPixelFormat = ""
  359. g_intPixelAspectRatioX = -1
  360. g_intPixelAspectRatioY = -1
  361. g_intVideoPerformance = -1
  362. g_strVideoCodecName = ""
  363. g_strVideoDevConf = ""
  364. g_intMaxPacketSize = -1
  365. g_intMinPacketSize = -1
  366.  
  367. g_intClipLeft = -1
  368. g_intClipRight = -1
  369. g_intClipTop = -1
  370. g_intClipBottom = -1
  371.  
  372. g_blnCreateCustomProfile = true
  373.  
  374. ' Create an encoder object.
  375. set g_objEncoder = WScript.CreateObject( "WMEncEng.WMEncoder" )
  376. WScript.ConnectObject g_objEncoder, "Encoder_"        ' Setup call back events
  377.     
  378. set g_objFileSystem = WScript.CreateObject( "Scripting.FileSystemObject" )
  379. g_objSourceGroup = Null
  380. g_objAudioSource = Null
  381. g_objVideoSource = Null
  382. g_objProfile = NULL
  383.  
  384. ' Read a integer value from the paramters list.
  385. ' args is the paramters list to be read.
  386. ' intIndex1 is the position of the parameter name.
  387. ' intIndex2 is the position of the parameter value.
  388. ' It will return the integer if it can read a integer value from the parameter list
  389. ' It will return -1 if it can not get a integer value from the paramters list.
  390. function ReadInteger( args, intIndex1, intIndex2 )
  391.     on error resume next
  392.     dim strTypeName
  393.  
  394.     ' Check the range of index.
  395.     if intIndex2 > UBound(args) or Left( args(intIndex2), 1 ) = "-" then
  396.         OutputInfo "Invalid format for parameter " & args(intIndex1)
  397.         ReadInteger = -1
  398.         exit function
  399.     end if
  400.  
  401.     strTypeName = typename( eval( args(intIndex2) ) )
  402.  
  403.     ' Convert it to an integer value.
  404.     ReadInteger = CLng( args(intIndex2) )
  405.  
  406.     ' The value is not in integer fommat.
  407.     if err.number <> 0 or ( strTypeName <> "Integer" and strTypeName <> "Long" )  then
  408.         OutputInfo "Expect integer value for parameter " & args(intIndex1)
  409.         ReadInteger = -1
  410.         err.Clear
  411.     end if
  412.  
  413. end function
  414.  
  415. ' Read a float value from the paramters list.
  416. ' args is the paramters list to be read.
  417. ' intIndex1 is the position of the parameter name.
  418. ' intIndex2 is the position of the parameter value.
  419. ' It will return the float if it can read a float value from the parameter list
  420. ' It will return -1 if it can not get a float value from the paramters list.
  421. function ReadFloat( args, intIndex1, intIndex2 )
  422.     on error resume next
  423.     dim strTypeName
  424.  
  425.     ' Check the range of index.
  426.     if intIndex2 > UBound(args) or Left( args(intIndex2), 1 ) = "-" then
  427.         OutputInfo "Invalid format for parameter " & args(intIndex1)
  428.         ReadFloat = -1
  429.         exit function
  430.     end if
  431.  
  432.     strTypeName = typename( eval( args(intIndex2) ) )
  433.  
  434.     ' Convert it to an integer value.
  435.     ReadFloat = CSng( args(intIndex2) )
  436.  
  437.     ' The value is not in integer fommat.
  438.     if err.number <> 0 or ( strTypeName <> "Integer" and strTypeName <> "Long" and strTypeName <> "Single" and strTypeName <> "Double" )  then
  439.         OutputInfo "Expect float value for parameter " & args(intIndex1)
  440.         ReadFloat = -1
  441.         err.Clear
  442.     end if
  443.  
  444. end function
  445.  
  446. ' Read a var value from the paramters list.
  447. ' args is the paramters list to be read.
  448. ' intIndex1 is the position of the parameter name.
  449. ' intIndex2 is the position of the parameter value.
  450. ' It will return the var if it can not get a var value from the paramters list.
  451. ' It will return "" if it can not get a var value from the paramters list.
  452. function ReadString( args, intIndex1, intIndex2 )
  453.     ' Check the range of index.
  454.     if intIndex2 > UBound(args) or Left( args(intIndex2), 1 ) = "-" then
  455.         OutputInfo "Invalid format for parameter " & args(intIndex1)
  456.         ReadString = ""
  457.         exit function
  458.     end if
  459.  
  460.     ReadString = args(intIndex2)
  461. end function
  462.  
  463. function ConvertStringToInteger( strInput )
  464.     on error resume next
  465.     dim strTypeName
  466.  
  467.     strTypeName = typename( eval( strInput ) )
  468.  
  469.     ' Convert it to an integer value.
  470.     ConvertStringToInteger = CLng( strInput )
  471.  
  472.     ' The value is not in integer fommat.
  473.     if err.number <> 0 or ( strTypeName <> "Integer" and strTypeName <> "Long" )  then
  474.         OutputInfo "Invalid format " & strInput & " expecting integer value"
  475.         ConvertStringToInteger = -1
  476.         err.Clear
  477.     end if
  478.  
  479. end function
  480.  
  481. ' Parse parameters.
  482.  
  483. if wscript.arguments.Length = 0 then
  484.     ShowHelp()
  485.     wscript.quit()
  486. end if
  487.  
  488. dim colStrArgs()
  489. reDim colStrArgs( wscript.arguments.Length-1 )
  490. for i = 0 to wscript.arguments.Length-1
  491.     colStrArgs(i) = wscript.arguments(i)
  492. next
  493.  
  494. if ParseParameters( colStrArgs ) then
  495.     ' Do different things depending on whether input is wme, directory encoding or file encoding
  496.     if g_strInput <> "" and g_objFileSystem.FolderExists(g_strInput) then
  497.         DoDirectoryModeEncoding()
  498.     elseif SetupEncoder() then
  499.         ' Transcode and show statistics information
  500.         if Transcode() and not g_blnSilent then 
  501.             ShowStatistics()
  502.         end if 
  503.     end if
  504. end if
  505.  
  506. WScript.Quit()
  507.  
  508. ' Output information
  509. function OutputInfo( strInfo )
  510.     WScript.Echo( strInfo )
  511. end function
  512.  
  513. ' Event handler for encoder state
  514. function Encoder_OnStateChange( enumState )
  515.     dim strState
  516.     ' Translate encoder state
  517.     select case  enumState
  518.         case WMENC_ENCODER_STARTING
  519.             strState = "Starting"
  520.  
  521.         case WMENC_ENCODER_RUNNING
  522.             strState = "Running"
  523.             g_blnEncoderStarted = true
  524.  
  525.         case WMENC_ENCODER_PAUSED
  526.             strState = "Paused"
  527.  
  528.         case WMENC_ENCODER_STOPPING
  529.             strState = "Stopping"
  530.  
  531.         case WMENC_ENCODER_STOPPED
  532.             g_tStopTime = Now()
  533.             strState = "Stopped"
  534.             g_blnEncoderStopped = true
  535.  
  536.         case WMENC_ENCODER_END_PREPROCESS
  537.             strState = "End Preprorocess"
  538.             g_blnEndPreProcess = true
  539.  
  540.         case else
  541.             strState = "Unknown State"
  542.     end select
  543.  
  544.     Encoder_OnStateChange = 1
  545. end function
  546.  
  547. ' Event handler for encoder error
  548. function Encoder_OnError( intResult )
  549.     g_intErrorCode = intResult
  550.  
  551.     Encoder_OnError = 0
  552. end function
  553.  
  554. ' Parse the parameters of this program.
  555. function ParseParameters( args )
  556.     dim strMarkOutTime
  557.     dim strArguments
  558.     dim strSaveToCfgFile
  559.     dim strLoadFromCfgFile
  560.     dim strCfgFileArguments
  561.     dim colStrConfigArgs
  562.     dim objTextFile
  563.  
  564.     for i=0 to UBound(args)
  565.         if args(i) = "-s_config" then
  566.             i = i + 1
  567.         else
  568.             strArguments = strArguments & args(i) & " "
  569.         end if
  570.  
  571.         if args(i) = "-config" then
  572.             strLoadFromCfgFile = ReadString( args, i, i+1 )
  573.             if strLoadFromCfgFile = "" then
  574.                 ParseParameters = false
  575.                 exit function
  576.             end if
  577.         
  578.             i = i + 1
  579.  
  580.             strLoadFromCfgFile = g_objFileSystem.GetAbsolutePathName( strLoadFromCfgFile )
  581.             set objTextFile = g_objFileSystem.OpenTextFile( strLoadFromCfgFile, 1 )
  582.             strCfgFileArguments = objTextFile.ReadLine
  583.             objTextFile.Close
  584.             
  585.             strCfgFileArguments = Trim( strCfgFileArguments )
  586.             if strCfgFileArguments = "" then
  587.                 OutputInfo "Configuration file " & strLoadFromCfgFile & " is empty"
  588.                 ParseParameters = false
  589.                 exit function
  590.             end if
  591.             colStrConfigArgs = Split( strCfgFileArguments )
  592.             if ParseParameters( colStrConfigArgs ) = false then
  593.                 ParseParameters = false
  594.                 exit function
  595.             end if
  596.         end if
  597.     next
  598.  
  599.     ' OutputInfo "Args = " & strArguments
  600.  
  601.     if UBound(args) = 0 then
  602.         ' If it has only has one parameter, check the content of this parameter.
  603.         select case LCase( args(0) )     
  604.             case "-devices":
  605.                 ' List all audio and video devices.
  606.                 ListDevices()
  607.                 ParseParameters = false
  608.                 exit function
  609.  
  610.             case "-a_codecs":
  611.                 ' List all audio codecs.
  612.                 ListAudioCodecs()
  613.                 ParseParameters = false
  614.                 exit function
  615.  
  616.             case "-a_formats"
  617.                 ' List audio formats
  618.                 ListAudioFormats()
  619.                 ParseParameters = false
  620.                 exit function
  621.             
  622.             case "-v_codecs":
  623.                 ' List all video codecs.
  624.                 ListVideoCodecs()
  625.                 ParseParameters = false
  626.                 exit function
  627.             
  628.             case "-help":
  629.                 ' Show help information.
  630.                 ShowHelp()
  631.                 ParseParameters = false
  632.                 exit function
  633.  
  634.             case "-?":
  635.                 ' Show help information.
  636.                 ShowHelp()
  637.                 ParseParameters = false
  638.                 exit function
  639.  
  640.             case "-all?":
  641.                 ' Show help information.
  642.                 ShowHelp()
  643.                 ParseParameters = false
  644.                 exit function
  645.             
  646.             case "/?":
  647.                 ' Show help information.
  648.                 ShowHelp()
  649.                 ParseParameters = false
  650.                 exit function
  651.             
  652.             case "-help?"
  653.                 ' Being up the encoder util chm
  654.                 ShowHelpChm()
  655.                 ParseParameters = false
  656.                 exit function
  657.  
  658.         end select
  659.     end if
  660.  
  661.     if UBound(args) = 1 then
  662.         select case LCase( args(0) ) 
  663.             case "-input"
  664.             ' Print out info about file specified
  665.             g_strInput = ReadString( args, 0, 1 )
  666.             if g_strInput = ""  then
  667.                 ParseParameters = false
  668.                 exit function
  669.             end if
  670.  
  671.             PrintFileInfo()
  672.             ParseParameters = false
  673.             exit function
  674.         end select
  675.     end if
  676.  
  677.     ' Check all parameters.
  678.     for i=0 to UBound(args)
  679.     
  680.         select case LCase( args(i) )
  681.             ' Parse all input related stuff
  682.             case "-wme"
  683.                 ' Get the WME file name to be load.
  684.                 g_strWMEFile = ReadString( args, i, i+1 )
  685.                 if g_strWMEFile = "" then
  686.                     ParseParameters = false
  687.                     exit function
  688.                 end if
  689.         
  690.                 i = i + 1
  691.  
  692.             case "-input"                        
  693.                 ' Get input source file name.
  694.                 g_strInput = ReadString( args, i, i+1 )
  695.                 if g_strInput = ""  then
  696.                     ParseParameters = false
  697.                     exit function
  698.                 end if
  699.         
  700.                 i = i + 1
  701.  
  702.             case "-audioonly"
  703.                 g_blnAudioOnly = true
  704.  
  705.             case "-videoonly"
  706.                 g_blnVideoOnly = true
  707.  
  708.             case "-adevice"
  709.                 g_blnDevice = true
  710.                 ' Get audio device index.
  711.                 if i+1 <= UBound(args) and Left( args(i+1), 1 ) <> "-" then
  712.                     g_intAudioDevice = ReadInteger( args, i, i+1 )
  713.                     if g_intAudioDevice = -1 then
  714.                         ParseParameters = false
  715.                         exit function
  716.                     end if
  717.                     
  718.                     i = i + 1
  719.                 else
  720.                     g_intAudioDevice = 0     ' default audio device
  721.                 end if
  722.  
  723.             case "-vdevice"
  724.                 g_blnDevice = true
  725.                 ' Get video device index.
  726.                 if i+1 <= UBound(args) and Left( args(i+1), 1 ) <> "-" then
  727.                     g_intVideoDevice = ReadInteger( args, i, i+1 )
  728.                     if g_intVideoDevice = -1 then
  729.                         ParseParameters = false
  730.                         exit function
  731.                     end if
  732.                 
  733.                     i = i + 1
  734.                 else
  735.                     g_intVideoDevice = 0     ' default video device
  736.                 end if
  737.  
  738.             ' Parse all profile related stuff
  739.             case "-profile"
  740.                 ' Get input source file name.
  741.                 g_strProfile = ReadString( args, i, i+1 )
  742.                 if g_strProfile = ""  then
  743.                     ParseParameters = false
  744.                     exit function
  745.                 end if
  746.         
  747.                 i = i + 1
  748.  
  749.             ' Parse audio related stuff
  750.             case "-a_mode"
  751.                 g_intAudioVBRMode = ReadInteger( args, i, i+1 )
  752.                 if g_intAudioVBRMode = -1 then
  753.                     ParseParameters = false
  754.                     exit function
  755.                 end if
  756.         
  757.                 i = i + 1
  758.  
  759.             case "-a_codec"
  760.                 'Get audio codec name
  761.                 g_strAudioCodec = ReadString( args, i, i+1 )
  762.                 g_strAudioCodec = UCase( g_strAudioCodec )
  763.  
  764.                 if g_strAudioCodec <> WMA9STD and g_strAudioCodec <> WMA9PRO and g_strAudioCodec <> WMA9LSL and g_strAudioCodec <> WMSPEECH and g_strAudioCodec <> PCM then
  765.                     OutputInfo "Please enter correct audio codec index only"
  766.                     ParseParameters = false
  767.                     exit function
  768.                 end if
  769.  
  770.                 if g_strAudioCodec = ""  then
  771.                     ParseParameters = false
  772.                     exit function
  773.                 end if
  774.         
  775.                 i = i + 1
  776.  
  777.             case "-a_setting"
  778.                 'Get audio setting
  779.                 g_strAudioSetting = ReadString( args, i, i+1 )
  780.                 if g_strAudioSetting = ""  then
  781.                     ParseParameters = false
  782.                     exit function
  783.                 end if
  784.         
  785.                 i = i + 1
  786.  
  787.             case "-a_peakbitrate"
  788.                 'Get audio peakbitrate size
  789.                 g_intAudioPeakBitrate = ReadInteger( args, i, i+1 )
  790.                 if g_intAudioPeakBitrate = -1  then
  791.                     ParseParameters = false
  792.                     exit function
  793.                 end if
  794.         
  795.                 i = i + 1
  796.  
  797.             case "-a_peakbuffer"
  798.                 'Get audio peakbuffer size
  799.                 g_intAudioPeakBuffer = ReadInteger( args, i, i+1 )
  800.                 if g_intAudioPeakBuffer = -1  then
  801.                     ParseParameters = false
  802.                     exit function
  803.                 end if
  804.         
  805.                 i = i + 1
  806.  
  807.             case "-a_content"
  808.                 'Get content type for speech
  809.                 g_intAudioSpeechContent = ReadInteger( args, i, i+1 )
  810.                 if g_intAudioSpeechContent = -1 then
  811.                     ParseParameters = false
  812.                     exit function
  813.                 elseif g_intAudioSpeechContent < 0 or g_intAudioSpeechContent > 2 then
  814.                     OutputInfo "Invalid range for parameter " & args(i)
  815.                     ParseParameters = false
  816.                     exit function
  817.                 end if
  818.         
  819.                 i = i + 1
  820.  
  821.             case "-a_contentedl"
  822.                 'Get EDL file for speech content
  823.                 g_strAudioSpeechEdl = ReadString( args, i, i+1 )
  824.                 if g_strAudioSpeechEdl = ""  then
  825.                     ParseParameters = false
  826.                     exit function
  827.                 end if
  828.         
  829.                 i = i + 1
  830.  
  831.             case "-a_folddown6to2"
  832.                 'Get EDL file for speech content
  833.                 g_intAudioSurroundMix = ReadInteger( args, i, i+1 )
  834.                 if g_intAudioSurroundMix = -1  then
  835.                     ParseParameters = false
  836.                     exit function
  837.                 end if
  838.                 g_intAudioCenterMix = ReadInteger( args, i, i+2 )
  839.                 if g_intAudioCenterMix = -1  then
  840.                     ParseParameters = false
  841.                     exit function
  842.                 end if    
  843.                 g_intAudioLEFMix = ReadInteger( args, i, i+3 )
  844.                 if g_intAudioLEFMix = -1  then
  845.                     ParseParameters = false
  846.                     exit function
  847.                 end if
  848.         
  849.                 i = i + 3
  850.  
  851.             ' Parse video related stuff
  852.             case "-v_mode"
  853.                 g_intVideoVBRMode = ReadInteger( args, i, i+1 )
  854.                 if g_intVideoVBRMode = -1 then
  855.                     ParseParameters = false
  856.                     exit function
  857.                 end if
  858.         
  859.                 i = i + 1
  860.  
  861.             case "-v_codec"
  862.                 'Get video codec name
  863.                 g_strVideoCodec = ReadString( args, i, i+1 )
  864.                 g_strVideoCodec = UCase( g_strVideoCodec )
  865.                 if g_strVideoCodec <> WMV7 and g_strVideoCodec <> WMV8 and g_strVideoCodec <> WMV9 and g_strVideoCodec <> WMS9 and g_strVideoCodec <> MP41 and g_strVideoCodec <> UNCOMP then
  866.                     OutputInfo "Please enter correct video codec index only"
  867.                     ParseParameters = false
  868.                     exit function
  869.                 end if
  870.  
  871.                 if g_strVideoCodec = ""  then
  872.                     ParseParameters = false
  873.                     exit function
  874.                 end if
  875.         
  876.                 i = i + 1
  877.  
  878.             case "-v_bitrate"
  879.                 'Get video bitrate
  880.                 g_intVideoBitrate = ReadInteger( args, i, i+1 )
  881.                 if g_intVideoBitrate = -1  then
  882.                     ParseParameters = false
  883.                     exit function
  884.                 end if
  885.         
  886.                 i = i + 1
  887.  
  888.             case "-v_buffer"
  889.                 'Get video buffer
  890.                 g_intVideoBuffer = ReadInteger( args, i, i+1 )
  891.                 if g_intVideoBuffer = -1  then
  892.                     ParseParameters = false
  893.                     exit function
  894.                 end if
  895.         
  896.                 i = i + 1
  897.  
  898.             case "-v_width"
  899.                 'Get video width
  900.                 g_intVideoWidth = ReadInteger( args, i, i+1 )
  901.                 if g_intVideoWidth = -1  then
  902.                     ParseParameters = false
  903.                     exit function
  904.                 end if
  905.         
  906.                 i = i + 1
  907.  
  908.             case "-v_height"
  909.                 'Get video height
  910.                 g_intVideoHeight = ReadInteger( args, i, i+1 )
  911.                 if g_intVideoHeight = -1  then
  912.                     ParseParameters = false
  913.                     exit function
  914.                 end if
  915.         
  916.                 i = i + 1
  917.  
  918.             case "-v_framerate"
  919.                 'Get video framerate
  920.                 g_intVideoFramerate = ReadFloat( args, i, i+1 )
  921.                 if g_intVideoFramerate = -1  then
  922.                     ParseParameters = false
  923.                     exit function
  924.                 end if
  925.                 g_intVideoFramerate = 1000 * g_intVideoFramerate
  926.         
  927.                 i = i + 1
  928.  
  929.             case "-v_keydist"
  930.                 'Get video keyframe distance
  931.                 g_intVideoKeydist = ReadInteger( args, i, i+1 )
  932.                 if g_intVideoKeydist = -1  then
  933.                     ParseParameters = false
  934.                     exit function
  935.                 end if
  936.  
  937.                 g_intVideoKeydist = 1000 * g_intVideoKeydist
  938.         
  939.                 i = i + 1
  940.  
  941.             case "-v_quality"
  942.                 'Get video bufferwindow size
  943.                 g_intVideoQuality = ReadInteger( args, i, i+1 )
  944.                 if g_intVideoQuality = -1  then
  945.                     ParseParameters = false
  946.                     exit function
  947.                 end if
  948.         
  949.                 i = i + 1
  950.  
  951.             case "-v_peakbitrate"
  952.                 'Get video peakbitrate size
  953.                 g_intVideoPeakBitrate = ReadInteger( args, i, i+1 )
  954.                 if g_intVideoPeakBitrate = -1  then
  955.                     ParseParameters = false
  956.                     exit function
  957.                 end if
  958.         
  959.                 i = i + 1
  960.  
  961.             case "-v_peakbuffer"
  962.                 'Get video peakbuffer size
  963.                 g_intVideoPeakBuffer = ReadInteger( args, i, i+1 )
  964.                 if g_intVideoPeakBuffer = -1  then
  965.                     ParseParameters = false
  966.                     exit function
  967.                 end if
  968.         
  969.                 i = i + 1
  970.  
  971.             case "-v_performance"
  972.                 'Get video complexity setting
  973.                 g_intVideoPerformance = ReadInteger( args, i, i+1 )
  974.                 if g_intVideoPerformance <> 0 and g_intVideoPerformance <> 20 and g_intVideoPerformance <> 40 and g_intVideoPerformance <> 60 and g_intVideoPerformance <> 80 and g_intVideoPerformance <> 100 then
  975.                     ParseParameters = false
  976.                     exit function
  977.                 end if
  978.  
  979.                 i = i + 1
  980.  
  981.             case "-v_preproc"
  982.                 'Get video preprocess setting
  983.                 g_intVideoPreprocess = ReadInteger( args, i, i+1 )
  984.                 if g_intVideoPreprocess = -1  or g_intVideoPreprocess > 18 then
  985.                     OutputInfo "Invalid preproc value: " & args(i+1)
  986.                     ParseParameters = false
  987.                     exit function
  988.                 end if
  989.     
  990.                 i = i + 1
  991.  
  992.             case "-pixelformat"
  993.                 ' Get pixelformat.
  994.                 g_strPixelFormat = ReadString( args, i, i+1 )
  995.                 if g_strPixelFormat = "" then
  996.                     ParseParameters = false
  997.                     exit function
  998.                 end if
  999.         
  1000.                 i = i + 1
  1001.  
  1002.             case "-pixelratio"
  1003.                 ' Get pixelformat.
  1004.                 g_intPixelAspectRatioX = ReadInteger( args, i, i+1 )
  1005.                 g_intPixelAspectRatioY = ReadInteger( args, i, i+2 )
  1006.  
  1007.                 if g_intPixelAspectRatioX = -1 or g_intPixelAspectRatioY = -1 then
  1008.                     ParseParameters = false
  1009.                     exit function
  1010.                 end if
  1011.         
  1012.                 i = i + 2
  1013.  
  1014.             case "-v_clip"
  1015.                 ' Get clipping values.
  1016.                 g_intClipLeft   = ReadInteger( args, i, i+1 )
  1017.                 g_intClipTop    = ReadInteger( args, i, i+2 )
  1018.                 g_intClipRight  = ReadInteger( args, i, i+3 )
  1019.                 g_intClipBottom = ReadInteger( args, i, i+4 )
  1020.  
  1021.                 if g_intClipLeft = -1 or g_intClipTop = -1 or g_intClipRight = -1 or g_intClipBottom = -1 then
  1022.                     ParseParameters = false
  1023.                     exit function
  1024.                 end if
  1025.  
  1026.                 i = i + 4
  1027.  
  1028.             case "-v_profile"
  1029.                 ' Get video device conformance value
  1030.                 g_strVideoDevConf = ReadString( args, i, i+1 )
  1031.                 g_strVideoDevConf = UCase( g_strVideoDevConf )
  1032.  
  1033.                 if g_strVideoDevConf = ""  then
  1034.                     ParseParameters = false
  1035.                     exit function
  1036.                 end if
  1037.         
  1038.                 i = i + 1
  1039.  
  1040.             ' Parse all output related stuff
  1041.             case "-output"                        
  1042.                 ' Get output file name.
  1043.                 g_strOutput = ReadString( args, i, i+1 )
  1044.                 if g_strOutput = "" then
  1045.                     ParseParameters = false
  1046.                     exit function
  1047.                 end if
  1048.         
  1049.                 i = i + 1
  1050.  
  1051.             case "-outputstring"
  1052.                 ' Read in the string that is to be appended to output file name
  1053.                 g_strOutputString = ReadString( args, i, i+1 )
  1054.                 if g_strOutputString = "" then
  1055.                     ParseParameters = false
  1056.                     exit function
  1057.                 end if
  1058.         
  1059.                 i = i + 1
  1060.  
  1061.             case "-broadcast"
  1062.                 ' Get broadcast port number.
  1063.                 if i+1 <= UBound(args) and Left( args(i+1), 1 ) <> "-" then
  1064.                     g_intBroadcast = ReadInteger( args, i, i+1 )
  1065.                     if g_intBroadcast = -1 then
  1066.                         ParseParameters = false
  1067.                         exit function
  1068.                     end if
  1069.         
  1070.                     i = i + 1
  1071.                 else
  1072.                     g_intBroadcast = 8080
  1073.                 end if
  1074.  
  1075.             case "-push"
  1076.                 ' Get push server, pub point and template name (optional)
  1077.                 g_strPushServer = ReadString( args, i, i+1 )
  1078.                 g_strPublishingPoint = ReadString( args, i, i+2 )
  1079.  
  1080.                 if g_strPushServer = "" or g_strPublishingPoint = "" then
  1081.                     ParseParameters = false
  1082.                     exit function
  1083.                 end if
  1084.  
  1085.                 ' Check if template name is specified
  1086.                 if i+1 <= UBound(args) and Left( args(i+3), 1 ) <> "-" then
  1087.                     g_strPushTemplate = ReadString( args, i, i+3 )
  1088.                     i = i + 3
  1089.                 else
  1090.                     i = i + 2
  1091.                 end if
  1092.  
  1093.             case "-time"
  1094.                 ' Get the mark in time of the source file.
  1095.                 g_intMarkInTime = ReadInteger( args, i, i+1 )
  1096.  
  1097.                 ' Get the markout time of the source file
  1098.                 strMarkOutTime = ReadString( args, i, i+2 )
  1099.                 if strMarkOutTime <> "end" then
  1100.                     g_intMarkOutTime = ConvertStringToInteger( strMarkOutTime )
  1101.                 else
  1102.                     g_intMarkOutTime = 0
  1103.                 end if
  1104.  
  1105.                 if g_intMarkInTime = -1 or g_intMarkOutTime = -1 then
  1106.                     ParseParameters = false
  1107.                     exit function
  1108.                 end if
  1109.         
  1110.         
  1111.                 i = i + 2
  1112.  
  1113.             case "-duration"
  1114.                 ' Get the duration of the encoding session.
  1115.                 g_intDuration = ReadInteger( args, i, i+1 )
  1116.                 if g_intDuration = -1 then
  1117.                     ParseParameters = false
  1118.                     exit function
  1119.                 end if
  1120.         
  1121.                 i = i + 1
  1122.  
  1123.             case "-silent"
  1124.                 g_blnSilent = true
  1125.  
  1126.             ' Parse all attributes
  1127.             case "-title"
  1128.                 ' Get the title of the output file.
  1129.                 g_strTitle = ReadString( args, i, i+1 )
  1130.                 if g_strTitle = "" then
  1131.                     ParseParameters = false
  1132.                     exit function
  1133.                 end if
  1134.  
  1135.                 i = i + 1
  1136.  
  1137.             case "-author"                        
  1138.                 ' Get the author of the output file.
  1139.                 g_strAuthor = ReadString( args, i, i+1 )
  1140.                 if g_strAuthor = "" then
  1141.                     ParseParameters = false
  1142.                     exit function
  1143.                 end if
  1144.         
  1145.                 i = i + 1
  1146.  
  1147.             case "-copyright"                        
  1148.                 ' Get the copyright information of the output file.
  1149.                 g_strCopyright = ReadString( args, i, i+1 )
  1150.                 if g_strCopyright = "" then
  1151.                     ParseParameters = false
  1152.                     exit function
  1153.                 end if
  1154.         
  1155.                 i = i + 1
  1156.  
  1157.             case "-description"
  1158.                 ' Get the descrption of the output file.
  1159.                 g_strDescription = ReadString( args, i, i+1 )
  1160.                 if g_strDescription = "" then
  1161.                     ParseParameters = false
  1162.                     exit function
  1163.                 end if
  1164.         
  1165.                 i = i + 1
  1166.  
  1167.             case "-rating"                        
  1168.                 ' Get the rating of the output file.
  1169.                 g_strRating = ReadString( args, i, i+1 )
  1170.                 if g_strRating = "" then
  1171.                     ParseParameters = false
  1172.                     exit function
  1173.                 end if
  1174.         
  1175.                 i = i + 1
  1176.  
  1177.             case "-saveprofile"                            
  1178.                 ' Get the profile file name to be saved.
  1179.                 g_strProfileSave = ReadString( args, i, i+1 )
  1180.                 if g_strProfileSave = "" then
  1181.                     ParseParameters = false
  1182.                     exit function
  1183.                 end if
  1184.         
  1185.                 i = i + 1
  1186.         
  1187.             case "-loadprofile"                            
  1188.                 ' Get the profile file name to be loaded.
  1189.                 g_strProfileLoad = ReadString( args, i, i+1 )
  1190.                 if g_strProfileLoad = "" then
  1191.                     ParseParameters = false
  1192.                     exit function
  1193.                 end if
  1194.         
  1195.                 i = i + 1
  1196.  
  1197.             case "-verbose"
  1198.                 ' Get the verbose mode.
  1199.                 g_intVerbose = ReadInteger( args, i, i+1 )
  1200.                 if g_intVerbose = -1 then
  1201.                     ParseParameters = false
  1202.                     exit function
  1203.                 end if
  1204.  
  1205.                 i = i + 1
  1206.  
  1207.             case "-s_config"
  1208.                 ' Save the WEU configuration file
  1209.                 strSaveToCfgFile = ReadString( args, i, i+1 )
  1210.                 if strSaveToCfgFile = "" then
  1211.                     ParseParameters = false
  1212.                     exit function
  1213.                 end if
  1214.  
  1215.                 i = i + 1
  1216.             case "-config"
  1217.                 if strLoadFromCfgFile = "" then
  1218.                     ParseParameters = false
  1219.                     exit function
  1220.                 end if
  1221.         
  1222.                 i = i + 1
  1223.  
  1224.             case "-maxpacket"
  1225.                 g_intMaxPacketSize = ReadInteger( args, i, i+1 )
  1226.                 if g_intMaxPacketSize = -1 then
  1227.                     ParseParameters = false
  1228.                     exit function
  1229.                 end if
  1230.  
  1231.                 i = i + 1
  1232.  
  1233.             case "-minpacket"
  1234.                 g_intMinPacketSize = ReadInteger( args, i, i+1 )
  1235.                 if g_intMinPacketSize = -1 then
  1236.                     ParseParameters = false
  1237.                     exit function
  1238.                 end if
  1239.         
  1240.                 i = i + 1
  1241.  
  1242.             case else
  1243.                 ' Show an error information for unrecognized parameter.
  1244.                 OutputInfo "Invalid parameter: " & args(i)
  1245.                 ParseParameters = false
  1246.                 exit function
  1247.         end select
  1248.     
  1249.     next
  1250.  
  1251.     if strSaveToCfgFile <> "" then
  1252.         strSaveToCfgFile = g_objFileSystem.GetAbsolutePathName( strSaveToCfgFile )
  1253.  
  1254.         ' Add extension if necessary
  1255.         if Right( LCase( strSaveToCfgFile ), 4 ) <>  ".weu" then
  1256.             strSaveToCfgFile = strSaveToCfgFile & ".weu"
  1257.         end if
  1258.  
  1259.         CreateOutputFolder( g_objFileSystem.GetParentFolderName( strSaveToCfgFile ) )    
  1260.         set objTextFile = g_objFileSystem.OpenTextFile( strSaveToCfgFile, 2, True )
  1261.         objTextFile.Write( strArguments )
  1262.         objTextFile.close
  1263.     end if
  1264.  
  1265.     ParseParameters = true
  1266. end function
  1267.  
  1268. ' Show help information of this program.
  1269. function ShowHelp()
  1270.     OutputInfo "Encode from files or devices to Windows Media files or streams. Supported"
  1271.     OutputInfo "source file formats are .wmv, .wma, .asf, .avi., .wav. .mpg, .mp3, .bmp,"
  1272.     OutputInfo "and .jpg."
  1273.     OutputInfo ""
  1274.     OutputInfo ""
  1275.     OutputInfo "Usage for I/O and statistics."
  1276.     OutputInfo ""
  1277.     OutputInfo "[-wme] <Windows Media Encoder session file>"
  1278.     OutputInfo "    Loads an existing Windows Media Encoder session file."
  1279.     OutputInfo "[-input] <file or directory name>"
  1280.     OutputInfo "    The file or directory to be encoded."
  1281.     OutputInfo "    Specify a file or directory name. If you specify a directory, supported"
  1282.     OutputInfo "    files in the directory will be encoded to the output directory, using"
  1283.     OutputInfo "    the same encoding settings. "
  1284.     OutputInfo "    Enclose file and directory names that have spaces in quotations."
  1285.     OutputInfo "    For example: -input ""c:\my sample.wmv"""
  1286.     OutputInfo "[-adevice] <audio device number>"
  1287.     OutputInfo "    The audio capture device to encode from."
  1288.     OutputInfo "    Use -devices to list all available capture devices."  
  1289.     OutputInfo "    When encoding from devices, you must specify a duration using -duration."      
  1290.     OutputInfo "[-vdevice] <video device number>"
  1291.     OutputInfo "    The video capture device to encode from."
  1292.     OutputInfo "    Use -devices to list all available capture devices."  
  1293.     OutputInfo "    When capturing from devices, you must specify a duration using -duration."      
  1294.     OutputInfo "[-output] <file or directory name>"
  1295.     OutputInfo "    The name of the output file or directory."
  1296.     OutputInfo "    If the input is a file, -output corresponds to a file name. If the input"
  1297.     OutputInfo "    is a directory, -output corresponds to a directory name."
  1298.     OutputInfo "    The output directory will be created if it doesn't already exist."
  1299.     OutputInfo "    An extension is automatically appended to output files."
  1300.     OutputInfo "    (.wma for audio-only Windows Media files, and .wmv for video-only or"
  1301.     OutputInfo "    audio and video Windows Media files.)"
  1302.     OutputInfo "[-outputstring] <string>"
  1303.     OutputInfo "    The string to be attached to every output file name for directory mode."
  1304.     OutputInfo "[-broadcast] <port>"
  1305.     OutputInfo "    Broadcasts via HTTP on the port specified. The default port is 8080."
  1306.     OutputInfo "[-time] <start time> <end time>"
  1307.     OutputInfo "    Specify the time segment (in msec) to be encoded. Use 'end' for"
  1308.     OutputInfo "    <end time> if you want to encode to the end of the file."
  1309.     OutputInfo "[-silent]"
  1310.     OutputInfo "    Prevents statistics from being displayed after encoding is finished."
  1311.     OutputInfo "[-config] <input configuration file>"
  1312.     OutputInfo "    Inputs arguments from a configuration file. The default extension is .weu."
  1313.     OutputInfo "    Parameters in the file can be overridden by later arguments."
  1314.     OutputInfo "[-s_config] <output configuration file>"
  1315.     OutputInfo "    Creates a configuration file. The file name extension .weu is appended"
  1316.     OutputInfo "    automatically."
  1317.     OutputInfo ""
  1318.     OutputInfo ""
  1319.     OutputInfo "Usage for profiles."
  1320.     OutputInfo "    You can override parameters in a profile by appending arguments to a"
  1321.     OutputInfo "    command."
  1322.     OutputInfo ""
  1323.     OutputInfo "[-profile] <profile code>"
  1324.     OutputInfo "    Specifies a predefined profile to use in the session."
  1325.     OutputInfo ""
  1326.     OutputInfo "Codes and basic descriptions for the predefined profiles:"
  1327.     OutputInfo "Audio/Video:"
  1328.     OutputInfo "    av20: Profile_AudioVideo_Modem_28K (actual rate: 20Kbps)"
  1329.     OutputInfo "    av32: Profile_AudioVideo_Modem_56K (32 Kbps)"
  1330.     OutputInfo "    av100: Profile_AudioVideo_LAN_100K (100 Kbps)"
  1331.     OutputInfo "    av225: Profile_AudioVideo_LAN_256K (225 Kbps)"
  1332.     OutputInfo "    av350: Profile_AudioVideo_LANDSL_384K (350 Kbps)"
  1333.     OutputInfo "    av450: Profile_AudioVideo_LANDSL_768K (450 Kbps)"
  1334.     OutputInfo "    av700: Profile_AudioVideo_NearBroadcast_700K (700 Kbps)"
  1335.     OutputInfo "    av1400: Profile_AudioVideo_NearBroadcast_1400K (1400 Kbps)"
  1336.     OutputInfo "    av350pal: Profile_AudioVideo_Broadband_PAL_384K (350 Kbps)"
  1337.     OutputInfo "    av700pal: Profile_AudioVideo_NearBroadcast_PAL_700K (700 Kbps)"
  1338.     OutputInfo "    av100_2p: Profile_AudioVideo_LAN_100K_2Pass (100 Kbps)"
  1339.     OutputInfo "    av350_2p: Profile_AudioVideo_LANDSL_384K_2Pass (350 Kbps)"
  1340.     OutputInfo "    av600vbr: Profile_AudioVideo_FilmVBR_600K (600 Kbps)"
  1341.     OutputInfo "    avq97vbr: Profile_AudioVideo_FilmVBR_Quality97 (Quality 97)"
  1342.     OutputInfo ""
  1343.     OutputInfo "Audio-only:"
  1344.     OutputInfo "    a20_1: Profile_AudioOnly_FMRadioMono_28K (20 Kbps)"
  1345.     OutputInfo "    a20_2: Profile_AudioOnly_FMRadioStereo_28K (20 Kbps)"
  1346.     OutputInfo "    a32: Profile_AudioOnly_Modem_56K (32 Kbps)"
  1347.     OutputInfo "    a48: Profile_AudioOnly_NearCDQuality_48K (48 Kbps)"
  1348.     OutputInfo "    a64: Profile_AudioOnly_CDQuality_64K (64 Kbps)"
  1349.     OutputInfo "    a96: Profile_AudioOnly_CDAudiophileQuality_96K (96 Kbps)"
  1350.     OutputInfo "    a128: Profile_AudioOnly_CDAudiophileQuality_128K (128 Kbps)"
  1351.     OutputInfo ""
  1352.     OutputInfo "Video-only:"
  1353.     OutputInfo "    v20: Profile_VideoOnly_Modem_28K (20 Kbps)"
  1354.     OutputInfo "    v32: Profile_VideoOnly_Modem_56K (32 Kbps)"
  1355.     OutputInfo ""
  1356.     OutputInfo "[-loadprofile] <profile file name>"
  1357.     OutputInfo "    Specifies a Windows Media Encoder or custom profile to use."
  1358.     OutputInfo ""
  1359.     OutputInfo ""
  1360.     OutputInfo "Usage for audio settings."
  1361.     OutputInfo ""
  1362.     OutputInfo "[-a_codec] <codec index>"
  1363.     OutputInfo "    Audio codec to be used. Use -a_codecs to list available codecs."
  1364.     OutputInfo "    Specify codec index:"
  1365.     OutputInfo "    WMA9STD: Windows Media Audio 9 (default)."
  1366.     OutputInfo "    WMA9PRO: Windows Media Audio 9 Professional"
  1367.     OutputInfo "    WMSP9:   Windows Media Audio 9 Voice"
  1368.     OutputInfo "    WMA9LSL:  Windows Media Audio 9 Lossless; -a_mode 2 required"
  1369.     OutputInfo "    PCM: No compression"
  1370.     OutputInfo "[-a_codecs]"
  1371.     OutputInfo "    Lists all audio codecs."
  1372.     OutputInfo "[-a_content] <mode>"
  1373.     OutputInfo "    Audio content mode for the Windows Media Audio v9 Voice codec."
  1374.     OutputInfo "    0 = No special mode for the audio content (default)"
  1375.     OutputInfo "    1 = Speech mode"
  1376.     OutputInfo "    2 = Mixed (speech and music) mode (also requires -a_contentedl)"
  1377.     OutputInfo "    You must also specify the Windows Media Audio v9 Voice codec."
  1378.     OutputInfo "[-a_contentedl] <file name>"
  1379.     OutputInfo "    Specifies the places in audio content where music starts and ends. To do"
  1380.     OutputInfo "    this, you must first create an optimization definition file. You"
  1381.     OutputInfo "    must specify the Windows Media Audio Voice codec and -a_content 2 when"
  1382.     OutputInfo "    when you use the -a_contentedl option."
  1383.     OutputInfo "[-a_folddown6to2] <surround mix> <center mix> <LFE>"
  1384.     OutputInfo "    Fold-down coefficients for multichannel audio. Use whole numbers only."
  1385.     OutputInfo "    Values will be converted to negative numbers. Valid numbers are 0 to 144."
  1386.     OutputInfo "    For example, -a_folddown6to2 10 3 3"
  1387.     OutputInfo "[-a_formats]"
  1388.     OutputInfo "    Lists all audio formats for each codec."
  1389.     OutputInfo "[-a_mode] <mode_number>"
  1390.     OutputInfo "    Audio encoding to be used."
  1391.     OutputInfo "    0: 1-pass CBR (default)."
  1392.     OutputInfo "    1: 2-pass CBR."
  1393.     OutputInfo "    2: Quality-based VBR."
  1394.     OutputInfo "    3: Bit rate-based VBR (two-pass)."
  1395.     OutputInfo "    4: Bit rate-based peak VBR (two-pass)." 
  1396.     OutputInfo "[-a_peakbitrate] <peak bit rate>"
  1397.     OutputInfo "    Specifies the peak bit rate in bits per second for peak bit rate-based"
  1398.     OutputInfo "    VBR for audio. If not specified, the peak bit rate is 1.5 times the"
  1399.     OutputInfo "    audio bit rate."
  1400.     OutputInfo "[-a_peakbuffer] <peak buffer>"
  1401.     OutputInfo "    Buffer in msec for audio with peak bit rate-based VBR. If not specified,"
  1402.     OutputInfo "    the default of 3000 msec is used."
  1403.     OutputInfo "[-a_setting] <setting>"
  1404.     OutputInfo "    Specifies the formats for audio setting."
  1405.     OutputInfo "    Use -a_formats to list supported audio formats for each codec."
  1406.     OutputInfo ""
  1407.     OutputInfo "    -a_setting Bitrate_SamplingRate_Channels. For example, -a_setting 48_44_2"
  1408.     OutputInfo "    specifies 48 Kbps, 44 kHz, and two channels. The default is 64_44_2."
  1409.     OutputInfo ""
  1410.     OutputInfo "    If you use quality-based VBR: -a_setting Qxx_SamplingRate_Channels."
  1411.     OutputInfo "    For example, -a_setting Q90_44_2 specifies a quality level of 90, 44 kHz,"
  1412.     OutputInfo "    and 2 channels."
  1413.     OutputInfo ""
  1414.     OutputInfo "    If you use the Windows Media Audio Professional 9:" 
  1415.     OutputInfo "    -a_setting Bitrate_SamplingRate_Channels_BitDepth."
  1416.     OutputInfo "    For example, -a_setting 250_44_2_24 specifies 250 Kbps, 44 kHz, "
  1417.     OutputInfo "    two channels, and 24-bit encoding. Use either 16- or 24-bit encoding."
  1418.     OutputInfo "    24-bit is the default."
  1419.     OutputInfo ""
  1420.     OutputInfo "    If you use the Windows Media Audio 9 Lossless codec:"
  1421.     OutputInfo "    -a_setting Qxx_SamplingRate_Channels_BitDepth. For example,"
  1422.     OutputInfo "    -a_setting Q100_44_2_24 specifies VBR Quality 100, 44 kHz, two channel,"
  1423.     OutputInfo "    24-bit encoding. (Quality-based VBR and a quality level of 100 is"
  1424.     OutputInfo "    required with this codec.)"
  1425.     OutputInfo "[-audioonly]"
  1426.     OutputInfo "    Encodes the audio portion of the stream only."
  1427.     OutputInfo ""
  1428.     OutputInfo ""
  1429.     OutputInfo ""
  1430.     OutputInfo ""
  1431.     OutputInfo "Usage for video settings."
  1432.     OutputInfo ""
  1433.     OutputInfo "[-v_codec] <codec index>"
  1434.     OutputInfo "    Video codec to be used. Use -v_codecs to list available video codecs."
  1435.     OutputInfo "    Specify codec index:"
  1436.     OutputInfo "       WMV7: Windows Media Video 7."
  1437.     OutputInfo "       WMV8: Windows Media Video 8.1."
  1438.     OutputInfo "       WMV9: Windows Media Video 9 (default)."
  1439.     OutputInfo "       WMS9: Windows Media Video Screen 9."
  1440.     OutputInfo "       MP41: ISO MPEG-4 Video v1"
  1441.     OutputInfo "       UNCOMP: Full frames (uncompressed)"
  1442.     OutputInfo "[-v_width] <width>"
  1443.     OutputInfo "    Video frame width in pixels to be encoded. Default: Source video width."
  1444.     OutputInfo "[-v_height] <height>"
  1445.     OutputInfo "    Video frame height in pixels to be encoded. Default: Source video height."
  1446.     OutputInfo "[-v_framerate] <rate>"
  1447.     OutputInfo "    Video frame rate in floating point to be encoded. Default: 30 fps."
  1448.     OutputInfo "[-v_keydist] <time>"
  1449.     OutputInfo "    Key frame distance in seconds for video. Default: 10 seconds."
  1450.     OutputInfo "[-v_preproc] <filter number>"
  1451.     OutputInfo "    Video preprocessing for certain input sources."
  1452.     OutputInfo "    0: None (for progressive video input)."
  1453.     OutputInfo "    1: Deinterlace but preserve the size."
  1454.     OutputInfo "       For example, 640x480x30 interlace to 640x480x30 progressive."
  1455.     OutputInfo "    2: Deinterlace but halve the size."
  1456.     OutputInfo "       For example, 640x480x30 interlace to 320x240x30 progressive."
  1457.     OutputInfo "    3: Deinterlace, halve the size, and double the frame rate."
  1458.     OutputInfo "       For example, 640x480x30 interlace to 320x240x60 progressive."
  1459.     OutputInfo "    4: Deinterlace, halve vertical size, and double frame rate."
  1460.     OutputInfo "       For example, 320x480x30 interlace to 320x240x60 progressive."
  1461.     OutputInfo "    5: Inverse telecine from 30fps to 24fps."
  1462.     OutputInfo "    6: Inverse telecine - First field is top field with AA telecine pattern."
  1463.     OutputInfo "    7: Inverse telecine - First field is top field with BB telecine pattern."
  1464.     OutputInfo "    8: Inverse telecine - First field is top field with BC telecine pattern."
  1465.     OutputInfo "    9: Inverse telecine - First field is top field with CD telecine pattern."
  1466.     OutputInfo "    10:Inverse telecine - First field is top field with DD telecine pattern."
  1467.     OutputInfo "    11:Inverse telecine - First field is bottom field with AA telecine "
  1468.     OutputInfo "       pattern."
  1469.     OutputInfo "    12:Inverse telecine - First field is bottom field with BB telecine"
  1470.     OutputInfo "       pattern."
  1471.     OutputInfo "    13:Inverse telecine - First field is bottom field with BC telecine"
  1472.     OutputInfo "       pattern."
  1473.     OutputInfo "    14:Inverse telecine - First field is bottom field with CD telecine"
  1474.     OutputInfo "      pattern."
  1475.     OutputInfo "    15:Inverse telecine - First field is bottom field with DD telecine"
  1476.     OutputInfo "       pattern."
  1477.     OutputInfo "    16:Interlaced encoding."
  1478.     OutputInfo "    17:Interlaced encoding - First field is top field."
  1479.     OutputInfo "    18:Interlaced encoding - First field is bottom field."
  1480.     OutputInfo "    Default: 0: None."
  1481.     OutputInfo "[-v_clip] <left> <top> <right> <bottom>"
  1482.     OutputInfo "    The region of the image (with respect to source) to be clipped/encoded."
  1483.     OutputInfo "    If the right is 0 or greater than width, it is ignored and re-assigned"
  1484.     OutputInfo "    to width. If the bottom is 0 or greater than height, it is ignored and"
  1485.     OutputInfo "    re-assigned to height."
  1486.     OutputInfo "[-v_mode] <mode number>"
  1487.     OutputInfo "    Video encoding to be used."
  1488.     OutputInfo "    0: 1-pass CBR (default)."
  1489.     OutputInfo "    1: 2-pass CBR."
  1490.     OutputInfo "    2: Quality-based VBR."
  1491.     OutputInfo "    3: Bit rate-based VBR (two-pass)."
  1492.     OutputInfo "    4: Peak bit rate-based VBR (two-pass)."
  1493.     OutputInfo "[-v_bitrate] <bit rate>"
  1494.     OutputInfo "    Video bit rate in bits per second to be encoded. Default: 250000 bps."
  1495.     OutputInfo "    Set this to 0 for audio-only coding."
  1496.     OutputInfo "[-v_buffer] <buffer>"
  1497.     OutputInfo "    Delay buffer in milliseconds for video. Default: 5000 msec."
  1498.     OutputInfo "[-v_quality] <quality>"
  1499.     OutputInfo "    CBR: Quality/smoothness tradeoff. 0 to 100, 0 being the smoothest."
  1500.     OutputInfo "    Default: 75."
  1501.     OutputInfo "    Quality-based VBR: Image quality for the video. Encode video to the"
  1502.     OutputInfo "    specified quality, regardless of bit rate. Default: 95"
  1503.     OutputInfo "[-v_peakbitrate] <peak bit rate>"
  1504.     OutputInfo "    Peak bit rate in bits per second for peak bit rate-based VBR for video."
  1505.     OutputInfo "    If not specified, the peak bit rate is 1.5 times the video bit rate."
  1506.     OutputInfo "[-v_peakbuffer] <peak buffer>"
  1507.     OutputInfo "    Buffer in msec for video, with peak bit rate-based VBR. If not specified,"
  1508.     OutputInfo "    the default of 5000 msec is used."
  1509.     OutputInfo "[-v_performance] <performance>"
  1510.     OutputInfo "    Use to adjust hardware performance settings. Possible values: 0, 20, 40,"
  1511.     OutputInfo "    60, 80, and 100, with 100 representing the highest quality. If you do not"
  1512.     OutputInfo "    specify a value, codec defaults are used."
  1513.     OutputInfo "[-v_profile] <device conformance>"
  1514.     OutputInfo "    Specifies the category of complexity of the encoded content. Use if you"
  1515.     OutputInfo "    are targeting your content for playback on a hardware device other than"
  1516.     OutputInfo "    a computer. Some hardware devices only support certain categories. (Refer"
  1517.     OutputInfo "    to the documentation for your device for more information.) If you do not"
  1518.     OutputInfo "    add the -v_profile option to a command, the correct complexity setting is"
  1519.     OutputInfo "    selected automatically during encoding. Possible values are SP (Simple),"
  1520.     OutputInfo "    MP (main), or CP (complex)."
  1521.     OutputInfo "[-duration] <seconds>"
  1522.     OutputInfo "    Amount of time in seconds to encode. Use when sourcing from devices."
  1523.     OutputInfo "[-saveprofile] <file name>"
  1524.     OutputInfo "    Saves current settings to a file for later reuse. Default file name"
  1525.     OutputInfo "    extension is .prx."
  1526.     OutputInfo "[-devices]"
  1527.     OutputInfo "    Lists audio and video capture devices."
  1528.     OutputInfo "[-v_codecs]"
  1529.     OutputInfo "    Lists all video codecs."
  1530.     OutputInfo "[-videoonly]"
  1531.     OutputInfo "    Encodes video stream only."
  1532.     OutputInfo "[-pixelratio] <x y>"
  1533.     OutputInfo "    Specifies the video pixel aspect ratio."
  1534.     OutputInfo "[-pixelformat] <format>"
  1535.     OutputInfo "    Specifies the video pixel format. Possible values:"
  1536.     OutputInfo "    I420"
  1537.     OutputInfo "    IYUV"
  1538.     OutputInfo "    RGB24"
  1539.     OutputInfo "    RGB32"
  1540.     OutputInfo "    RGB555"
  1541.     OutputInfo "    RGB565"
  1542.     OutputInfo "    RGB8"
  1543.     OutputInfo "    UYVY"
  1544.     OutputInfo "    YUY2"
  1545.     OutputInfo "    YV12"
  1546.     OutputInfo "    YVU9"
  1547.     OutputInfo "    YVYU"
  1548.     OutputInfo "[-maxpacket] <packet size>"
  1549.     OutputInfo "    Specifies the maximum packet size in bytes."
  1550.     OutputInfo "[-minpacket] <packet size>"
  1551.     OutputInfo "    Specifies the minimum packet size in bytes."
  1552.     OutputInfo ""
  1553.     OutputInfo "[-title] <string>"
  1554.     OutputInfo "    Title of the content. Enclose strings with spaces in quotations. For"
  1555.     OutputInfo "    example: -title ""Windows Media Sample"""
  1556.     OutputInfo "[-author] <string>"
  1557.     OutputInfo "[-copyright] <string>"
  1558.     OutputInfo "[-description] <string>    "
  1559.     OutputInfo "[-rating] <string>"
  1560.     OutputInfo "NOTE: The maximum string length for each one is 255.    "
  1561. end function
  1562.  
  1563. ' Brings up the encoder utility chm file
  1564. function ShowHelpChm()
  1565.     dim strChmFileName, strExeName, strCommandLine
  1566.     dim RetVal
  1567.     dim objShell, objDir
  1568.  
  1569.     'Create a shell object. we will use this to execute the command
  1570.     Set objShell = WScript.CreateObject("WScript.Shell")
  1571.  
  1572.     'Get the Windows directory object
  1573.     set objDir = g_objFileSystem.GetSpecialFolder( 0 )
  1574.  
  1575.     'make the executable name ( %windir%\hh.exe ) form the windows dir object
  1576.     strExeName = objDir.drive & "\" & objDir.name & "\"
  1577.     strExeName = strExeName & "hh.exe" 
  1578.  
  1579.     'make the full path name for the chm file to be shown
  1580.     strChmFileName = """" & ObjDir.drive & "\program files\windows media components\encoder\wmencutil.chm" & """"
  1581.  
  1582.     'make the command line
  1583.     strCommandLine = strExeName & " " & strChmFileName
  1584.  
  1585.     'run the command and dont wait for the app to finish
  1586.     RetVal = objShell.Run( strCommandLine, 4, FALSE )
  1587. end function
  1588.  
  1589. ' Print out info about the input file
  1590. function PrintFileInfo()
  1591.     dim objFileInfo
  1592.     dim strFileInfo
  1593.     dim strInput2
  1594.         
  1595.     strInput2 = g_objFileSystem.GetAbsolutePathName( g_strInput )
  1596.  
  1597.     set objFileInfo = WScript.CreateObject( "FileInfo.MediaInfo" )
  1598.  
  1599.     objFileInfo.FileName = strInput2
  1600.  
  1601.     strFileInfo = objFileInfo.MediaInfo
  1602.  
  1603.     OutputInfo strFileInfo
  1604. end function
  1605.  
  1606. ' List audio codecs.
  1607. function ListAudioCodecs()
  1608.     dim objProfile
  1609.     dim objName
  1610.     dim intFourCC
  1611.     dim intVBRMode
  1612.     dim strCodecId
  1613.     dim intCount
  1614.     
  1615.     set objProfile = WScript.CreateObject( "WMENCEng.WMEncProfile2" )
  1616.  
  1617.     OutputInfo vbCrLf & "Audio Codecs: "
  1618.  
  1619.     ' For all VBR modes    
  1620.     for intVBRMode = 1 to 4
  1621.         objProfile.VBRMode(WMENC_AUDIO, 0) = intVBRMode
  1622.  
  1623.         select case intVBRMode
  1624.             case WMENC_PVM_NONE
  1625.                 OutputInfo "CBR Mode :"
  1626.  
  1627.             case WMENC_PVM_PEAK
  1628.                 OutputInfo "Peak Bit Rate-Based VBR Audio Mode :"
  1629.  
  1630.             case WMENC_PVM_UNCONSTRAINED
  1631.                 OutputInfo "Quality-Based VBR Audio Mode :"
  1632.  
  1633.             case WMENC_PVM_BITRATE_BASED
  1634.                 OutputInfo "Bit Rate-Based VBR Audio Mode :"
  1635.     
  1636.             case else
  1637.                 OutputInfo "Unknown Mode"
  1638.         end select
  1639.  
  1640.         intCount = 0
  1641.         ' Enum all audio codecs
  1642.         for i=0 to objProfile.AudioCodecCount-1
  1643.             objProfile.EnumAudioCodec i, objName
  1644.  
  1645.             'Check and display fourcc
  1646.             intFourCC = objProfile.GetCodecFourCCFromIndex(WMENC_AUDIO, i)
  1647.             select case intFourCC
  1648.                 case WMA9STD_FOURCC
  1649.                     strCodecId = WMA9STD
  1650.  
  1651.                 case WMA9PRO_FOURCC
  1652.                     strCodecId = WMA9PRO
  1653.  
  1654.                 case WMA9LSL_FOURCC
  1655.                     strCodecId = WMA9LSL
  1656.  
  1657.                 case WMSPEECH_FOURCC
  1658.                     strCodecId = WMSPEECH
  1659.  
  1660.                 case PCM_FOURCC
  1661.                     strCodecId = PCM
  1662.  
  1663.                 case else
  1664.                     strCodecId = ""
  1665.             end select
  1666.  
  1667.             if( strCodecId <> "" ) then  
  1668.                 OutputInfo vbTab &  "[" & intCount & "] "  & strCodecId & " : " & objName
  1669.                 intCount = intCount + 1
  1670.             end if
  1671.         next
  1672.  
  1673.         OutputInfo vbCrLf
  1674.     next
  1675.     
  1676. end function
  1677.  
  1678. ' List video codecs.
  1679. function ListVideoCodecs()
  1680.     dim objProfile
  1681.     dim objName
  1682.     dim intFourCC
  1683.     dim intVBRMode
  1684.     dim strCodecId
  1685.     dim intCount
  1686.     
  1687.     set objProfile = WScript.CreateObject( "WMENCEng.WMEncProfile2" )
  1688.  
  1689.     OutputInfo vbCrLf & "Video Codecs: "
  1690.  
  1691.     ' For all VBR modes    
  1692.     for intVBRMode = 1 to 4
  1693.         objProfile.VBRMode(WMENC_VIDEO, 0) = intVBRMode
  1694.  
  1695.         select case intVBRMode
  1696.             case WMENC_PVM_NONE
  1697.                 OutputInfo "CBR Mode :"
  1698.  
  1699.             case WMENC_PVM_PEAK
  1700.                 OutputInfo "Peak Bit Rate-Based VBR Audio Mode :"
  1701.  
  1702.             case WMENC_PVM_UNCONSTRAINED
  1703.                 OutputInfo "Quality-Based VBR Audio Mode :"
  1704.  
  1705.             case WMENC_PVM_BITRATE_BASED
  1706.                 OutputInfo "Bit Rate-Based VBR Audio Mode :"
  1707.     
  1708.             case else
  1709.                 OutputInfo "Unknown Mode"
  1710.         end select
  1711.  
  1712.         intCount = 0
  1713.         ' Enum all video codecs
  1714.         for i=0 to objProfile.VideoCodecCount-1
  1715.             objProfile.EnumVideoCodec i, objName
  1716.  
  1717.             'Check and display fourcc
  1718.             intFourCC = objProfile.GetCodecFourCCFromIndex(WMENC_VIDEO, i)
  1719.             select case intFourCC
  1720.                 case WMV7_FOURCC
  1721.                     strCodecId = WMV7
  1722.  
  1723.                 case WMV8_FOURCC
  1724.                     strCodecId = WMV8
  1725.  
  1726.                 case WMV9_FOURCC
  1727.                     strCodecId = WMV9
  1728.  
  1729.                 case WMS9_FOURCC
  1730.                     strCodecId = WMS9
  1731.  
  1732.                 case MP41_FOURCC
  1733.                     strCodecId = MP41
  1734.  
  1735.                 case UNCOMP_FOURCC
  1736.                     strCodecId = UNCOMP
  1737.  
  1738.                 case else
  1739.                     strCodecId = ""
  1740.             end select
  1741.  
  1742.             if( strCodecId <> "" ) then  
  1743.                 OutputInfo vbTab &  "[" & i & "] "  & strCodecId & " : " & objName
  1744.                 intCount = intCount + 1
  1745.             end if
  1746.         next
  1747.         OutputInfo vbCrLf
  1748.     next
  1749.  
  1750.  
  1751. end function
  1752.  
  1753. ' List audio formats.
  1754. function ListAudioFormats()
  1755.     dim objProfile
  1756.     dim objName
  1757.     dim intFourCC
  1758.     dim intVBRMode
  1759.     dim strCodecId, strAudFormatName, strSetting
  1760.     dim intAudioSampleRate, intAudioChannels, intAudioBitsPerSample, intAudioBitrate 
  1761.     dim intArgSpaceCount, intBitrateSpaceCount, intSamplingRateSpaceCount, intChannelSpaceCount
  1762.     
  1763.     intArgSpaceCount = 24
  1764.     intBitrateSpaceCount = 16
  1765.     intSamplingRateSpaceCount = 20
  1766.     intChannelSpaceCount = 10
  1767.  
  1768.     set objProfile = WScript.CreateObject( "WMENCEng.WMEncProfile2" )
  1769.  
  1770.     OutputInfo vbCrLf & "Audio Codecs: "
  1771.  
  1772.     ' For all VBR modes    
  1773.     for intVBRMode = 1 to 4
  1774.         objProfile.VBRMode(WMENC_AUDIO, 0) = intVBRMode
  1775.  
  1776.         select case intVBRMode
  1777.             case WMENC_PVM_NONE
  1778.                 OutputInfo "CBR Mode :"
  1779.  
  1780.             case WMENC_PVM_PEAK
  1781.                 OutputInfo "Peak Bit Rate-Based VBR Audio Mode :"
  1782.  
  1783.             case WMENC_PVM_UNCONSTRAINED
  1784.                 OutputInfo "Quality-Based VBR Audio Mode :"
  1785.  
  1786.             case WMENC_PVM_BITRATE_BASED
  1787.                 OutputInfo "Bit Rate-Based VBR Audio Mode :"
  1788.     
  1789.             case else
  1790.                 OutputInfo "Unknown Mode"
  1791.         end select
  1792.  
  1793.         ' Enum all audio codecs
  1794.         for i=0 to objProfile.AudioCodecCount-1
  1795.             objProfile.EnumAudioCodec i, objName
  1796.  
  1797.             'Check and display fourcc
  1798.             intFourCC = objProfile.GetCodecFourCCFromIndex(WMENC_AUDIO, i)
  1799.             select case intFourCC
  1800.                 case WMA9STD_FOURCC
  1801.                     strCodecId = WMA9STD
  1802.  
  1803.                 case WMA9PRO_FOURCC
  1804.                     strCodecId = WMA9PRO
  1805.  
  1806.                 case WMA9LSL_FOURCC
  1807.                     strCodecId = WMA9LSL
  1808.  
  1809.                 case WMSPEECH_FOURCC
  1810.                     strCodecId = WMSPEECH
  1811.  
  1812.                 case PCM_FOURCC
  1813.                     strCodecId = PCM
  1814.             end select
  1815.  
  1816.             if( strCodecId <> "" ) then  
  1817.                 OutputInfo vbTab & strCodecId & " : " & objName & " (" & strCodecId & "):"
  1818.             else
  1819.                 OutputInfo vbTab & objName & ":"
  1820.             end if
  1821.  
  1822.             OutputInfo vbCrLf
  1823.  
  1824.             if intVBRMode = WMENC_PVM_UNCONSTRAINED then
  1825.                 if strCodecId <> WMA9PRO then
  1826.                     OutputInfo vbTab & vbTab & PadSpaces("Argument", intArgSpaceCount) & PadSpaces("Quality", intBitrateSpaceCount) & PadSpaces("Sampling rate", intSamplingRateSpaceCount) & "Channel"
  1827.                 else
  1828.                     OutputInfo vbTab & vbTab & PadSpaces("Argument", intArgSpaceCount) & PadSpaces("Quality", intBitrateSpaceCount) & PadSpaces("Sampling rate", intSamplingRateSpaceCount) & PadSpaces("Channel", intChannelSpaceCount) & "BitsPerSample"
  1829.                 end if
  1830.             else
  1831.                 if strCodecId <> WMA9PRO and strCodecId <> WMA9LSL then
  1832.                     OutputInfo vbTab & vbTab & PadSpaces("Argument", intArgSpaceCount) & PadSpaces("Bitrate", intBitrateSpaceCount) & PadSpaces("Sampling rate", intSamplingRateSpaceCount) & "Channel"
  1833.                 else
  1834.                     OutputInfo vbTab & vbTab & PadSpaces("Argument", intArgSpaceCount) & PadSpaces("Bitrate", intBitrateSpaceCount) & PadSpaces("Sampling rate", intSamplingRateSpaceCount) & PadSpaces("Channel", intChannelSpaceCount) & "BitsPerSample"
  1835.                 end if
  1836.             end if
  1837.  
  1838.             OutputInfo vbTab & vbTab & "------------------------------------------------------------------------------------"
  1839.  
  1840.             For j=0 To objProfile.audioFormatCount(i) - 1
  1841.                 intAudioBitrate = objProfile.EnumAudioFormat(i, j, strAudFormatName, intAudioSampleRate, intAudioChannels, intAudioBitsPerSample)
  1842.  
  1843.                 if intVBRMode <> WMENC_PVM_UNCONSTRAINED then
  1844.                     intAudioBitrate = CLng(intAudioBitrate / 1000)
  1845.                 else
  1846.                     intAudioBitrate = "Q" & intAudioBitrate
  1847.                 end if
  1848.  
  1849.                 if intAudioSampleRate = 88200 then
  1850.                     intAudioSampleRate = 88
  1851.                 elseif intAudioSampleRate = 44100 then
  1852.                     intAudioSampleRate = 44
  1853.                 elseif intAudioSampleRate = 22050 then
  1854.                     intAudioSampleRate = 22
  1855.                 elseif intAudioSampleRate = 11025 then
  1856.                     intAudioSampleRate = 11
  1857.                 else
  1858.                     intAudioSampleRate = Clng(intAudioSampleRate / 1000)
  1859.                 end if
  1860.  
  1861.                 if strCodecId <> WMA9PRO and strCodecId <> WMA9LSL then
  1862.                     strSetting = intAudioBitrate & "_" & intAudioSampleRate & "_" & intAudioChannels
  1863.                     OutputInfo vbTab & vbTab & PadSpaces(strSetting, intArgSpaceCount) & PadSpaces(intAudioBitrate, intBitrateSpaceCount) & PadSpaces(intAudioSampleRate, intSamplingRateSpaceCount) & intAudioChannels
  1864.                 else 
  1865.                     strSetting = intAudioBitrate & "_" & intAudioSampleRate & "_" & intAudioChannels & "_" & intAudioBitsPerSample
  1866.                     OutputInfo vbTab & vbTab & PadSpaces(strSetting, intArgSpaceCount) & PadSpaces(intAudioBitrate, intBitrateSpaceCount) & PadSpaces(intAudioSampleRate, intSamplingRateSpaceCount) & PadSpaces(intAudioChannels, intChannelSpaceCount) & intAudioBitsPerSample
  1867.                 end if
  1868.  
  1869.             next 
  1870.     
  1871.             OutputInfo vbCrLf & vbCrLf
  1872.  
  1873.         next
  1874.         OutputInfo vbCrLf
  1875.     next
  1876.     
  1877. end function
  1878.  
  1879.  
  1880. ' Add spaces to the end of arg to create intCount characters string
  1881. function PadSpaces( arg, intCount )
  1882.  
  1883.     if Len(arg) >= intCount then
  1884.         PadSpaces = arg
  1885.         exit function
  1886.     end if
  1887.  
  1888.     PadSpaces = arg & Space( intCount - Len(arg) )
  1889. end function
  1890.  
  1891.  
  1892.  
  1893. ' List all audio and video devices.
  1894. function ListDevices()
  1895.     dim objManager, objPlugin, i, j, k, count
  1896.  
  1897.     set objManager = g_objEncoder.SourcePluginInfoManager
  1898.  
  1899.     for i=0 to 1
  1900.         if i = 0 then
  1901.             OutputInfo "audio device:"
  1902.         elseif i = 1 then
  1903.             OutputInfo "video device:"
  1904.         end if
  1905.         count = 0
  1906.         for j=0 to objManager.Count-1
  1907.             set objPlugin = objManager.Item(j)
  1908.  
  1909.             if objPlugin.Resources = true then
  1910.                 if i = 0 then
  1911.                     if objPlugin.MediaType = 1 or objPlugin.MediaType = 3 then
  1912.                         ' Enum all devices in this type
  1913.                         for k=0 to objPlugin.Count-1
  1914.                             OutputInfo vbTab & count & " : " & objPlugin.Item(k)
  1915.                             count = count + 1
  1916.                         next
  1917.                     end if
  1918.                 elseif i = 1 then
  1919.                     if objPlugin.MediaType = 2 or objPlugin.MediaType = 3 or objPlugin.MediaType = 6 then
  1920.                         ' Enum all devices in this type
  1921.                         for k=0 to objPlugin.Count-1
  1922.                             OutputInfo vbTab & count & " : " & objPlugin.Item(k)
  1923.                             count = count + 1
  1924.                         next
  1925.                     end if
  1926.                 end if
  1927.             end if
  1928.         next
  1929.     next
  1930. end function
  1931.  
  1932.  
  1933. ' Setup encoder using the current settings.
  1934. function SetupEncoder( )
  1935.     
  1936.     if not CreateSourceGroup() then
  1937.         SetupEncoder = false
  1938.         exit function
  1939.     end if
  1940.  
  1941.     if not SetupInput() then
  1942.         SetupEncoder = false
  1943.         exit function
  1944.     end if
  1945.  
  1946.     if not SetupProfile() then
  1947.         SetupEncoder = false
  1948.         exit function
  1949.     end if
  1950.  
  1951.     if not SetupOutput()  then
  1952.         SetupEncoder = false
  1953.         exit function
  1954.     end if
  1955.  
  1956.     if not SetupTime() then
  1957.         SetupEncoder = false
  1958.         exit function
  1959.     end if
  1960.  
  1961.     if not SetupDisplayInfo() then
  1962.         SetupEncoder = false
  1963.         exit function
  1964.     end if
  1965.  
  1966.     g_objEncoder.AutoStop = true
  1967.  
  1968.     SetupEncoder = true
  1969. end function
  1970.  
  1971. ' Create Source group by loading from wme or adding a new one
  1972. function CreateSourceGroup()
  1973.  
  1974.     dim objProfile
  1975.     dim intCodecIndex
  1976.  
  1977.     ' If a WME file is provided, load the encoding configuration from this WME file.
  1978.     if g_strWMEFile <> "" then
  1979.         on error resume next
  1980.  
  1981.         ' Load enocder session from a WME file
  1982.         g_objEncoder.Load( g_objFileSystem.GetAbsolutePathName( g_strWMEFile ) )
  1983.  
  1984.         ' Add a new source group.
  1985.         set g_objSourceGroup = g_objEncoder.SourceGroupCollection.Item(0)
  1986.  
  1987.         set objProfile = g_objSourceGroup.Profile
  1988.         set g_objProfile = WScript.CreateObject( "WMENCENG.WMEncProfile2" )
  1989.         g_objProfile.LoadFromIWMProfile( objProfile )
  1990.  
  1991.         ' If source file has an auido stream, get the audio source.
  1992.         if g_objSourceGroup.SourceCount( WMENC_AUDIO ) > 0 then
  1993.             set g_objAudioSource = g_objSourceGroup.Source( WMENC_AUDIO, 0 )
  1994.             intCodecIndex = g_objProfile.Audience(0).AudioCodec( 0 )
  1995.             g_objProfile.EnumAudioCodec intCodecIndex, g_strAudioCodecName
  1996.         end if
  1997.  
  1998.         ' If source file has a video stream, get the video source.
  1999.         if g_objSourceGroup.SourceCount( WMENC_VIDEO ) > 0 then
  2000.             set g_objVideoSource = g_objSourceGroup.Source( WMENC_VIDEO, 0 )
  2001.             intCodecIndex = g_objProfile.Audience(0).VideoCodec( 0 )
  2002.             g_objProfile.EnumVideoCodec intCodecIndex, g_strVideoCodecName
  2003.         end if
  2004.  
  2005.         g_blnCreateCustomProfile = false
  2006.  
  2007.         if g_intMaxPacketSize = -1 then
  2008.             g_intMaxPacketSize = objProfile.MaxPacketSize
  2009.         end if
  2010.  
  2011.         if err.number <> 0 then
  2012.             OutputInfo "Loading the session (.wme) file failed: " & g_strWMEFile
  2013.             err.Clear
  2014.             CreateSourceGroup = false
  2015.             exit function
  2016.         end if
  2017.     else
  2018.         ' Create a new source group for this session
  2019.         set g_objSourceGroup = g_objEncoder.SourceGroupCollection.Add( "SG_1" )
  2020.     end if
  2021.  
  2022.     CreateSourceGroup = true
  2023. end function
  2024.  
  2025. ' Setup profile configuration
  2026. function SetupProfile()
  2027.     on error resume next
  2028.  
  2029.     dim objProfile
  2030.     dim objAudience
  2031.     dim blnRet
  2032.     dim strProfileLoad
  2033.     dim objFileInfo
  2034.     dim intVideoFramerateTemp
  2035.     dim intSourceVideoFramerate
  2036.     dim strInput2
  2037.  
  2038.     ' save the global frame rate, since we might over-write it based on the input files frame rate
  2039.     intVideoFramerateTemp = g_intVideoFramerate
  2040.  
  2041.     if IsNull(g_objProfile) then
  2042.         Set g_objProfile = WScript.CreateObject( "WMENCEng.WMEncProfile2" )
  2043.         g_objProfile.ContentType = g_intSessionType
  2044.         g_objProfile.ProfileName = "WMCMDProfile"
  2045.  
  2046.         Set objAudience = g_objProfile.AddAudience( 10000000 )
  2047.     else
  2048.         g_objProfile.ContentType = g_intSessionType
  2049.         Set objAudience = g_objProfile.Audience( 0 )
  2050.  
  2051.     end if
  2052.  
  2053.  
  2054.     if g_intVideoFramerate = -1 then
  2055.         ' Assume 30 fps unless we can get the input files framerate
  2056.         g_intVideoFramerate = 30000
  2057.     end if
  2058.  
  2059.     strInput2 = g_objFileSystem.GetAbsolutePathName( g_strInput )
  2060.     set objFileInfo = WScript.CreateObject( "FileInfo.MediaInfo" )
  2061.     objFileInfo.FileName = strInput2
  2062.     intSourceVideoFramerate = 100000
  2063.     intSourceVideoFramerate = objFileInfo.FrameRate * 1000
  2064.     if intSourceVideoFramerate = 0 then
  2065.         intSourceVideoFramerate = 100000
  2066.     end if
  2067.  
  2068.     ' Set the video frame rate to lower of the source input or user specified frame rate for better quality
  2069.     if intSourceVideoFramerate < g_intVideoFramerate then
  2070.         g_intVideoFramerate = intSourceVideoFramerate
  2071.     end if
  2072.  
  2073.     ' if profile string is specified load it
  2074.     if g_strProfile <> "" then
  2075.         blnRet = SetupPredefinedProfile( objAudience )
  2076.  
  2077.         g_blnCreateCustomProfile = false
  2078.  
  2079.         if not blnRet then
  2080.             SetupProfile = false
  2081.             exit function
  2082.         end if
  2083.     end if
  2084.  
  2085.     if g_strProfileLoad <> "" then
  2086.         strProfileLoad = g_objFileSystem.GetAbsolutePathName( g_strProfileLoad )
  2087.         g_objProfile.LoadFromFile strProfileLoad
  2088.         g_blnCreateCustomProfile = false
  2089.         Set objAudience = g_objProfile.Audience( 0 )
  2090.  
  2091.         ' enable two pass if required
  2092.         if not isnull( g_objVideoSource ) then                
  2093.             if g_objProfile.VBRMode( WMENC_VIDEO, 0 ) = WMENC_PVM_PEAK or g_objProfile.VBRMode( WMENC_VIDEO, 0 ) = WMENC_PVM_BITRATE_BASED then
  2094.                 g_objVideoSource.PreProcessPass = 1
  2095.             end if
  2096.             
  2097.             if objAudience.VideoFPS(0) > g_intVideoFramerate then
  2098.                 objAudience.VideoFPS(0) = g_intVideoFramerate
  2099.             else
  2100.                 g_intVideoFramerate = objAudience.VideoFPS(0)
  2101.             end if
  2102.         end if
  2103.  
  2104.         if not isnull( g_objAudioSource ) then                
  2105.             if g_objProfile.VBRMode( WMENC_AUDIO, 0 ) = WMENC_PVM_PEAK or g_objProfile.VBRMode( WMENC_AUDIO, 0 ) = WMENC_PVM_BITRATE_BASED then
  2106.                 g_objAudioSource.PreProcessPass = 1
  2107.             end if
  2108.         end if
  2109.     end if
  2110.  
  2111.     ' First time: override the WME or predefined profile with custom values
  2112.     blnRet = SetupCustomProfile( objAudience )
  2113.     if not blnRet then
  2114.         SetupProfile = false
  2115.         exit function
  2116.     end if
  2117.  
  2118.     if g_blnCreateCustomProfile then
  2119.         ' Second time: Update profile based on input specified and default values
  2120.         LoadProfileDefaults()
  2121.  
  2122.         blnRet = SetupCustomProfile( objAudience )
  2123.         if not blnRet then
  2124.             SetupProfile = false
  2125.             exit function
  2126.         end if
  2127.     end if
  2128.  
  2129.     ' Set a few more things like interlaced coding and pixel ratio
  2130.     if g_intPixelAspectRatioX <> -1 or g_intPixelAspectRatioY <> -1 then
  2131.         g_objProfile.NonSquarePixelMode(0) = true
  2132.     end if
  2133.  
  2134.     if g_intVideoPreprocess >= 16 and g_intVideoPreprocess <= 18 then
  2135.         g_objProfile.InterlaceMode(0) = true
  2136.     end if
  2137.  
  2138.     if g_intMinPacketSize <> -1 then
  2139.         g_objProfile.MinPacketSize = g_intMinPacketSize
  2140.     end if
  2141.  
  2142.     ' Set the profile in encoder.
  2143.     g_objSourceGroup.Profile = g_objProfile
  2144.  
  2145.     if g_intMaxPacketSize <> -1 then
  2146.         g_objSourceGroup.Profile.MaxPacketSize = g_intMaxPacketSize
  2147.     end if
  2148.  
  2149.     g_intVideoFramerate = intVideoFramerateTemp
  2150.  
  2151.     ' Invalid profile
  2152.     if err.number <> 0 then
  2153.         OutputInfo "Invalid profile: 0x" & Hex( err.number ) & " " & err.Description
  2154.         err.Clear
  2155.         SetupProfile = false
  2156.         exit function
  2157.     end if
  2158.  
  2159.     if g_strProfileSave <> "" then
  2160.         g_objProfile.SaveToFile g_strProfileSave
  2161.     end if
  2162.  
  2163.     SetupProfile = true
  2164. end function
  2165.  
  2166. ' Setup ouptut configuration.
  2167. function SetupOutput()
  2168.     ' Is an output file name provided?
  2169.     if g_strOutput <> "" then
  2170.         ' Is this output name a directory?
  2171.         if g_objFileSystem.FolderExists( g_strOutput ) then
  2172.             
  2173.             ' If the output name is a directory, create the real output file name.
  2174.             ' If the input is a file, use the file name of the input file (extension is not ussed).
  2175.             ' If the inputs are devices, use 'output' as the output name.            
  2176.             if g_strInput <> "" then
  2177.                 g_strOutput = g_strOutput & "\\" & g_objFileSystem.GetBaseName( g_strInput )
  2178.             else
  2179.                 g_strOutput = g_strOutput & "\\output"
  2180.             end if
  2181.         end if
  2182.  
  2183.         ' If the output file name doesn't have a extension, create a proper one.
  2184.         if g_objFileSystem.GetExtensionName( g_strOutput ) = "" then            
  2185.  
  2186.             ' Does "." already exist in the output file name.
  2187.             ' If not, append "." to the output file name.
  2188.             if Right( g_strOutput, 1 ) <>  "." then
  2189.                 g_strOutput = g_strOutput & "."
  2190.             end if
  2191.  
  2192.             ' Does this session have a video source?
  2193.             ' If it has video stream, append wmv extension, otherwise wma extension is appended.
  2194.             if g_objSourceGroup.SourceCount( WMENC_VIDEO ) > 0 then
  2195.                 g_strOutput = g_strOutput & "wmv"
  2196.             else
  2197.                 g_strOutput = g_strOutput & "wma"
  2198.             end if
  2199.         end if
  2200.  
  2201.         CreateOutputFolder( g_objFileSystem.GetParentFolderName( g_objFileSystem.GetAbsolutePathName( g_strOutput ) ) )
  2202.  
  2203.         g_objEncoder.File.LocalFileName = g_strOutput
  2204.     else
  2205.         ' Get the output file name from WME file.
  2206.         if not IsNull(g_objEncoder.File.LocalFileName) then
  2207.             g_strOutput = g_objEncoder.File.LocalFileName
  2208.         end if
  2209.     end if
  2210.  
  2211.     ' Enable HTTP broadcasting for the encoder if a broadcast port is provided.
  2212.     if g_intBroadcast <> -1 then
  2213.         g_objEncoder.Broadcast.PortNumber( WMENC_PROTOCOL_HTTP ) = g_intBroadcast
  2214.     end if
  2215.  
  2216.     ' Enable push if push server is specified
  2217.     if g_strPushServer <> "" then
  2218.         g_objEncoder.Broadcast.ServerName = g_strPushServer
  2219.         g_objEncoder.Broadcast.PublishingPoint = g_strPublishingPoint
  2220.         if g_strPushTemplate <> "" then
  2221.             g_objEncoder.Broadcast.Template = g_strPushTemplate
  2222.         end if
  2223.     end if
  2224.  
  2225.     SetupOutput = true
  2226. end function
  2227.  
  2228. ' Setup display configuration
  2229. function SetupDisplayInfo()
  2230.     dim objDisplayInfo
  2231.     dim objAttributes
  2232.     
  2233.     set objDisplayInfo = g_objEncoder.DisplayInfo
  2234.     set objAttributes = g_objEncoder.Attributes
  2235.  
  2236.     ' Is title set?
  2237.     if g_strTitle <> "" then
  2238.         objDisplayInfo.Title = g_strTitle
  2239.     end if
  2240.  
  2241.     ' Is author set?
  2242.     if g_strAuthor <> "" then
  2243.         objDisplayInfo.Author = g_strAuthor
  2244.     end if
  2245.  
  2246.     ' Is copyright set?
  2247.     if g_strCopyright <> "" then
  2248.         objDisplayInfo.Copyright = g_strCopyright
  2249.     end if
  2250.  
  2251.     ' Is description set?
  2252.     if g_strDescription <> "" then
  2253.         objDisplayInfo.Description = g_strDescription
  2254.     end if
  2255.  
  2256.     ' Is rating set?
  2257.     if g_strRating <> "" then
  2258.         objDisplayInfo.Rating = g_strRating
  2259.     end if
  2260.  
  2261.     ' Add folddown coefficients
  2262.     if g_intAudioSurroundMix <> -1 then
  2263.         objAttributes.Add "SurroundMix", -g_intAudioSurroundMix
  2264.         objAttributes.Add "CenterMix", -g_intAudioCenterMix
  2265.         objAttributes.Add "LFEMix", -g_intAudioLEFMix
  2266.     end if
  2267.  
  2268.     SetupDisplayInfo = true
  2269. end function
  2270.  
  2271. ' Setup a new profile based on predefined profiles
  2272. function SetupPredefinedProfile(objAudience)
  2273.     dim intAudioCodecIndex, intVideoCodecIndex
  2274.     
  2275.     '  The following defined built in profiles.  Built in profiles are defined by the following:
  2276.     '  Audio:  Codec, channels, sample rate, bit rate, bit depth
  2277.     '  Video:  Codec, bit rate, width, height, fpsx1000, buffer (ms), smoothness, key frame 
  2278.     '  New built in profiles can be added by creating a new case statement and specifying
  2279.     '  audio and video profile settings.
  2280.     select case LCase( g_strProfile )
  2281.         case "av20":
  2282.             SetupAudioAudience objAudience, "WMA9STD", 1, 8000, 5000, 16
  2283.             SetupVideoAudience objAudience, "WMV9", 15000, 160, 120, 15000, 5000, 75, 10000
  2284.  
  2285.         case "av32":
  2286.             SetupAudioAudience objAudience, "WMA9STD", 1, 11025, 10168, 16
  2287.             SetupVideoAudience objAudience, "WMV9", 22000, 176, 144, 15000, 5000, 75, 10000
  2288.  
  2289.         case "av100":
  2290.             SetupAudioAudience objAudience, "WMA9STD", 1, 16000, 16000, 16
  2291.             SetupVideoAudience objAudience, "WMV9", 84000, 320, 240, 15000, 5000, 75, 10000
  2292.  
  2293.         case "av225":
  2294.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 40000, 16
  2295.             SetupVideoAudience objAudience, "WMV9", 185000, 320, 240, 30000, 5000, 75, 10000
  2296.  
  2297.         case "av350":
  2298.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 48000, 16
  2299.             SetupVideoAudience objAudience, "WMV9", 302000, 320, 240, 30000, 5000, 75, 10000
  2300.  
  2301.         case "av450":
  2302.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2303.             SetupVideoAudience objAudience, "WMV9", 386000, 320, 240, 30000, 5000, 75, 10000
  2304.  
  2305.         case "av700":
  2306.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2307.             SetupVideoAudience objAudience, "WMV9", 636000, 320, 240, 30000, 5000, 75, 10000
  2308.  
  2309.         case "av1400":
  2310.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 128040, 16
  2311.             SetupVideoAudience objAudience, "WMV9", 1272000, 320, 240, 30000, 5000, 75, 10000
  2312.  
  2313.         case "av350pal":
  2314.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 48000, 16
  2315.             SetupVideoAudience objAudience, "WMV9", 302000, 384, 288, 25000, 5000, 75, 10000
  2316.  
  2317.         case "av700pal":
  2318.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2319.             SetupVideoAudience objAudience, "WMV9", 636000, 384, 288, 25000, 5000, 75, 10000
  2320.  
  2321.         case "av100_2p":
  2322.             SetupAudioAudience objAudience, "WMA9STD", 1, 16000, 16000, 16
  2323.             SetupVideoAudience objAudience, "WMV9", 84000, 320, 240, 15000, 5000, 75, 10000
  2324.             g_objAudioSource.PreProcessPass = 1
  2325.             g_objVideoSource.PreProcessPass = 1
  2326.  
  2327.         case "av350_2p"
  2328.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 48000, 16
  2329.             SetupVideoAudience objAudience, "WMV9", 302000, 320, 240, 30000, 5000, 75, 10000
  2330.             g_objAudioSource.PreProcessPass = 1
  2331.             g_objVideoSource.PreProcessPass = 1
  2332.  
  2333.         case "av600vbr":
  2334.             g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_PEAK
  2335.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2336.             SetupVideoAudience objAudience, "WMV9", 536000, 320, 240, 24000, 5000, 75, 10000
  2337.             
  2338.             objAudience.VideoPeakBitrate(0) = 1.5 * objAudience.VideoBitrate(0)
  2339.             objAudience.VideoBufferMax(0) = 5000
  2340.  
  2341.             ' Turn telecine and two pass video on
  2342.             g_objVideoSource.Optimization = WMENC_VIDEO_INVERSETELECINE
  2343.             g_objVideoSource.PreProcessPass = 1    
  2344.  
  2345.         case "avq97vbr":
  2346.             g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_UNCONSTRAINED
  2347.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2348.             SetupVideoAudience objAudience, "WMV9", 536000, 320, 240, 24000, 5000, 97, 10000
  2349.  
  2350.             ' Turn telecine on
  2351.             g_objVideoSource.Optimization = WMENC_VIDEO_INVERSETELECINE
  2352.  
  2353.         case "a20_1":
  2354.             SetupAudioAudience objAudience, "WMA9STD", 1, 22050, 20008, 16
  2355.  
  2356.         case "a20_2":
  2357.             SetupAudioAudience objAudience, "WMA9STD", 2, 22050, 20008, 16
  2358.  
  2359.         case "a32":
  2360.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 32000, 16
  2361.  
  2362.         case "a48":
  2363.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 48024, 16
  2364.  
  2365.         case "a64":
  2366.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64016, 16
  2367.  
  2368.         case "a96":
  2369.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 96024, 16
  2370.  
  2371.         case "a128":
  2372.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 128016, 16
  2373.  
  2374.         case "v20":
  2375.             SetupVideoAudience objAudience, "WMV9", 20000, 176, 144, 15000, 5000, 75, 10000
  2376.  
  2377.         case "v32":
  2378.             SetupVideoAudience objAudience, "WMV9", 32000, 240, 176, 15000, 5000, 75, 10000
  2379.  
  2380.         case else
  2381.             OutputInfo "No predefined profile found."
  2382.             SetupPredefinedProfile = false
  2383.             exit function
  2384.  
  2385.     end select
  2386.  
  2387.     SetupPredefinedProfile = true
  2388. end function
  2389.  
  2390. ' Given audio parameters this will setup the audience
  2391. function SetupAudioAudience(objAudience, strAudioCodec, intChannels, intSampleRate, intBitrate, intBitsPerSample)
  2392.     dim intAudioCodecIndex
  2393.  
  2394.     intAudioCodecIndex = GetAudioCodecIndex(strAudioCodec)
  2395.     g_objProfile.EnumAudioCodec intAudioCodecIndex, g_strAudioCodecName
  2396.     
  2397.     objAudience.AudioCodec(0) = intAudioCodecIndex
  2398.     objAudience.SetAudioConfig 0, intChannels, intSampleRate, intBitrate, intBitsPerSample
  2399. end function
  2400.  
  2401. ' Given video parameters this will setup the audience
  2402. function SetupVideoAudience(objAudience, strVideoCodec, intBitrate, intWidth, intHeight, intFps, intBufferWindow, intSmoothness, intKeyFrame)
  2403.     dim intVideoCodecIndex
  2404.     
  2405.     if intFps > g_intVideoFramerate then
  2406.         intFps = g_intVideoFramerate
  2407.     else
  2408.         g_intVideoFramerate = intFps
  2409.     end if
  2410.  
  2411.     intVideoCodecIndex = GetVideoCodecIndex(strVideoCodec)
  2412.     g_objProfile.EnumVideoCodec intVideoCodecIndex, g_strVideoCodecName
  2413.  
  2414.     objAudience.VideoCodec(0) = intVideoCodecIndex
  2415.     objAudience.VideoBitrate(0) = intBitrate
  2416.     objAudience.VideoWidth(0) = intWidth
  2417.     objAudience.VideoHeight(0) = intHeight
  2418.     objAudience.VideoFps(0) = intFps
  2419.     objAudience.VideoKeyFrameDistance(0) = intKeyFrame
  2420.     objAudience.VideoBufferSize(0) = intBufferWindow
  2421.  
  2422.     ' For quality vbr mode use intSmoothness as VBR quality
  2423.     if g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_UNCONSTRAINED then
  2424.         objAudience.VideoCompressionQuality(0) = intSmoothness
  2425.     else
  2426.         objAudience.VideoImageSharpness(0) = intSmoothness
  2427.     end if
  2428. end function
  2429.  
  2430. ' Given audio string(eg WMA9STD) this returns the audio codec index
  2431. function GetAudioCodecIndex(strAudioCodec)
  2432.     dim intFourCC
  2433.  
  2434.     select case strAudioCodec
  2435.         case WMA9STD
  2436.             intFourCC = WMA9STD_FOURCC
  2437.  
  2438.         case WMA9PRO
  2439.             intFourCC = WMA9PRO_FOURCC
  2440.  
  2441.         case WMA9LSL
  2442.             intFourCC = WMA9LSL_FOURCC
  2443.  
  2444.         case WMSPEECH
  2445.             intFourCC = WMSPEECH_FOURCC
  2446.  
  2447.         case PCM
  2448.             intFourCC = PCM_FOURCC
  2449.  
  2450.         case else
  2451.             intFourCC = WMA9STD_FOURCC
  2452.     end select
  2453.  
  2454.     GetAudioCodecIndex = g_objProfile.GetCodecIndexFromFourCC(WMENC_AUDIO, intFourCC)
  2455.  
  2456. end function
  2457.  
  2458. ' Given the video string(eg WMV9) this returns the video codec index
  2459. function GetVideoCodecIndex(strVideoCodec)
  2460.     dim intFourCC
  2461.  
  2462.     select case strVideoCodec
  2463.         case WMV7
  2464.             intFourCC = WMV7_FOURCC
  2465.  
  2466.         case WMV8
  2467.             intFourCC = WMV8_FOURCC
  2468.  
  2469.         case WMV9
  2470.             intFourCC = WMV9_FOURCC
  2471.  
  2472.         case WMS9
  2473.             intFourCC = WMS9_FOURCC
  2474.  
  2475.         case MP41
  2476.             intFourCC = MP41_FOURCC
  2477.  
  2478.         case UNCOMP
  2479.             intFourCC = UNCOMP_FOURCC
  2480.  
  2481.         case else
  2482.             intFourCC = WMV9_FOURCC
  2483.     end select
  2484.     
  2485.     GetVideoCodecIndex = g_objProfile.GetCodecIndexFromFourCC(WMENC_VIDEO, intFourCC)
  2486.  
  2487. end function
  2488.  
  2489. ' Setup a new profile based on predefined profiles
  2490. function SetupCustomProfile(objAudience)
  2491.     dim intAudioCodecIndex, intVideoCodecIndex
  2492.     dim blnRet
  2493.  
  2494.     if not g_blnAudioOnly and not g_blnVideoOnly  then
  2495.         if g_strVideoCodec = UNCOMP and g_strAudioCodec <> PCM then
  2496.             OutputInfo "Audio codec must be uncompressed when using uncompressed video codec"
  2497.             SetupCustomProfile = false
  2498.             exit function
  2499.         end if
  2500.  
  2501.         if g_strVideoCodec <> UNCOMP and g_strAudioCodec = PCM then
  2502.             OutputInfo "Video codec must be uncompressed when using uncompressed audio codec"
  2503.             SetupCustomProfile = false
  2504.             exit function
  2505.         end if    
  2506.     end if
  2507.  
  2508.     if not isnull( g_objAudioSource ) then
  2509.         blnRet = SetupCustomAudioProfile( objAudience )
  2510.         if not blnRet then
  2511.             SetupCustomProfile = false
  2512.             exit function
  2513.         end if
  2514.     end if
  2515.  
  2516.     if not isnull( g_objVideoSource ) then
  2517.         blnRet = SetupCustomVideoProfile( objAudience )
  2518.         if not blnRet then
  2519.             SetupCustomProfile = false
  2520.             exit function
  2521.         end if
  2522.     end if
  2523.  
  2524.     SetupCustomProfile = true
  2525.  
  2526. end function
  2527.  
  2528. ' Setup the audio part of the custom profile
  2529. function SetupCustomAudioProfile(objAudience)
  2530.     on error resume next
  2531.  
  2532.     ' Setup audio
  2533.     dim intAudioCodecIndex, intAudioBitrate, intAudioSampleRate, intAudioChannels, intBitDepth, intFourCC
  2534.     dim strTemp
  2535.     dim intNextArgStart, intNextArgEnd
  2536.     dim blnAudioQuality, blnValidBitrate, blnValidSampleRate, blnValidChannels, blnValidBitDepth
  2537.  
  2538.  
  2539.     'Set audio vbr mode
  2540.     if g_intAudioVBRMode <> -1 then
  2541.         select case g_intAudioVBRMode
  2542.             case 0 ' 1 pass CBR
  2543.  
  2544.             case 1 ' 2 pass CBR
  2545.                 g_objAudioSource.PreProcessPass = 1
  2546.  
  2547.             case 2 ' Quality VBR mode
  2548.                 g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_UNCONSTRAINED
  2549.  
  2550.             case 3 ' 2 pass bitrate based VBR
  2551.                 g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_BITRATE_BASED
  2552.                 g_objAudioSource.PreProcessPass = 1
  2553.  
  2554.             case 4 ' 2 pass bitrate-based peak constrained VBR
  2555.                 g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_PEAK
  2556.                 g_objAudioSource.PreProcessPass = 1
  2557.  
  2558.             case else
  2559.                 OutputInfo "Invalid -a_mode <mode_number>"
  2560.                 SetupCustomAudioProfile = false
  2561.                 exit function
  2562.         end select
  2563.     end if
  2564.  
  2565.  
  2566.     ' Set audio codec
  2567.     if g_strAudioCodec <> "" then
  2568.         intAudioCodecIndex = GetAudioCodecIndex(g_strAudioCodec)
  2569.         intFourCC = g_objProfile.EnumAudioCodec(intAudioCodecIndex, g_strAudioCodecName)
  2570.  
  2571.         objAudience.AudioCodec(0) = intAudioCodecIndex
  2572.     end if
  2573.  
  2574.     'Parse the a_setting string to extract audio bitrate sample rate and stuff like that
  2575.     if g_strAudioSetting <> "" then
  2576.         intNextArgStart = instr(g_strAudioSetting, "_")
  2577.         strTemp = left(g_strAudioSetting, intNextArgStart-1)
  2578.     
  2579.         if ucase( left(strTemp, 1) ) = "Q" then
  2580.             g_intAudioVBRMode = 2
  2581.             g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_UNCONSTRAINED
  2582.  
  2583.             blnAudioQuality = true
  2584.             intAudioBitrate = ConvertStringToInteger( mid(strTemp, 2 ) )
  2585.         else
  2586.             intAudioBitrate = ConvertStringToInteger( strTemp )
  2587.         end if
  2588.  
  2589.         'OutputInfo "****Audio bit rate is " & intAudioBitrate
  2590.  
  2591.         intNextArgEnd = instr(intNextArgStart+1, g_strAudioSetting, "_")
  2592.         strTemp = mid(g_strAudioSetting, intNextArgStart+1, intNextArgEnd-intNextArgStart-1)
  2593.         intAudioSampleRate = ConvertStringToInteger( strTemp )
  2594.         'OutputInfo "****Audio sample rate is " & intAudioSampleRate
  2595.     
  2596.         intNextArgStart = intNextArgEnd
  2597.         intNextArgEnd = instr(intNextArgStart+1, g_strAudioSetting, "_")
  2598.         if intNextArgEnd > 0 then
  2599.             strTemp = mid(g_strAudioSetting, intNextArgStart+1, intNextArgEnd-intNextArgStart-1)
  2600.         else
  2601.             strTemp = mid(g_strAudioSetting, intNextArgStart+1)
  2602.         end if
  2603.         intAudioChannels = ConvertStringToInteger( strTemp )
  2604.         'OutputInfo "****Audio channels are " & intAudioChannels
  2605.  
  2606.         if intNextArgEnd > 0 then
  2607.             strTemp = mid(g_strAudioSetting, intNextArgEnd+1)
  2608.             intBitDepth = ConvertStringToInteger( strTemp )
  2609.         else
  2610.             intBitDepth = 16
  2611.         end if
  2612.         'OutputInfo "****Audio bit depth is " & intBitDepth
  2613.  
  2614.         if intAudioBitrate = -1 or intAudioSampleRate = -1 or intAudioChannels = -1 or intBitDepth = -1 then
  2615.             SetupCustomAudioProfile = false
  2616.             err.Raise &H80070057
  2617.             exit function
  2618.         end if
  2619.  
  2620.         'Convert bitrate and samplerate to actual values
  2621.         if blnAudioQuality = false then
  2622.             if intAudioBitrate = 1411 then
  2623.                 intAudioBitrate = 1411200
  2624.             elseif intAudioBitrate = 705 then
  2625.                 intAudioBitrate = 705600
  2626.             elseif intAudioBitrate = 353 then
  2627.                 intAudioBitrate = 352800
  2628.             else
  2629.                 intAudioBitrate = 1000 * intAudioBitrate
  2630.             end if
  2631.         end if
  2632.  
  2633.         ' For peak vbr mode set peakbitrate and peak buffer
  2634.         if g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_PEAK then
  2635.             if g_intAudioPeakBuffer <> -1 then
  2636.                 objAudience.AudioBufferMax(0) = g_intAudioPeakBuffer
  2637.             end if
  2638.  
  2639.             if g_intAudioPeakBitrate = -1 then
  2640.                 objAudience.AudioPeakBitrate(0) = 1.5 * intAudioBitrate
  2641.             else
  2642.                 objAudience.AudioPeakBitrate(0) = g_intAudioPeakBitrate
  2643.             end if
  2644.             'OutputInfo "****Audio peak bit rate is " & objAudience.AudioPeakbitrate(0)
  2645.             'OutputInfo "****Audio peak buffer is " & objAudience.AudioBufferMax(0)
  2646.         end if
  2647.  
  2648.         if intAudioSampleRate = 88 then
  2649.             intAudioSampleRate = 88200
  2650.         elseif intAudioSampleRate = 44 then
  2651.             intAudioSampleRate = 44100
  2652.         elseif intAudioSampleRate = 22 then
  2653.             intAudioSampleRate = 22050
  2654.         elseif intAudioSampleRate = 11 then
  2655.             intAudioSampleRate = 11025
  2656.         else
  2657.             intAudioSampleRate = 1000 * intAudioSampleRate
  2658.         end if
  2659.  
  2660.         ' Validate values for bitrate, samplerate, channels and depth 
  2661.         if blnAudioQuality = false then
  2662.             blnValidBitrate = CheckForValidAudioBitRates( intAudioBitrate )
  2663.             if blnValidBitrate = false then 
  2664.                 OutputInfo "Invalid audio bit rate " & intAudioBitrate
  2665.                 SetupCustomAudioProfile = false
  2666.                 exit function
  2667.             end if
  2668.         end if
  2669.  
  2670.         blnValidSampleRate = CheckForValidAudioSamplingRates( intAudioSampleRate )
  2671.         if blnValidSampleRate = false then 
  2672.             OutputInfo "Invalid audio sample rate " & intAudioSampleRate
  2673.             SetupCustomAudioProfile = false
  2674.             exit function
  2675.         end if
  2676.  
  2677.         blnValidChannels = CheckForValidAudioChannel( intAudioChannels )
  2678.         if blnValidChannels = false then 
  2679.             OutputInfo "Invalid audio channels " & intAudioChannels
  2680.             SetupCustomAudioProfile = false
  2681.             exit function
  2682.         end if
  2683.  
  2684.         blnValidBitDepth = CheckForValidDepth( intBitDepth )
  2685.         if blnValidBitDepth = false then 
  2686.             OutputInfo "Invalid bits per sample " & intBitDepth
  2687.             SetupCustomAudioProfile = false
  2688.             exit function
  2689.         end if
  2690.  
  2691.         objAudience.SetAudioConfig 0, intAudioChannels, intAudioSampleRate, intAudioBitrate, intBitDepth
  2692.     end if
  2693.  
  2694.     SetupCustomAudioProfile = true
  2695.  
  2696. end function
  2697.  
  2698. ' Setup the video part of the custom profile
  2699. function SetupCustomVideoProfile(objAudience)
  2700.     on error resume next
  2701.  
  2702.     ' Setup audio
  2703.     dim intVideoCodecIndex, intFourCC
  2704.  
  2705.     'Set video vbr mode
  2706.     if g_intVideoVBRMode <> -1 then
  2707.         select case g_intVideoVBRMode
  2708.             case 0 ' 1 pass CBR
  2709.  
  2710.             case 1 ' 2 pass CBR
  2711.                 g_objVideoSource.PreProcessPass = 1
  2712.  
  2713.             case 2 ' Quality VBR mode
  2714.                 g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_UNCONSTRAINED
  2715.  
  2716.             case 3 ' 2 pass bitrate based VBR
  2717.                 g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_BITRATE_BASED
  2718.                 g_objVideoSource.PreProcessPass = 1
  2719.  
  2720.             case 4 ' 2 pass bitrate-based peak constrained VBR
  2721.                 g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_PEAK            
  2722.                 g_objVideoSource.PreProcessPass = 1
  2723.  
  2724.             case else
  2725.                 OutputInfo "Invalid -v_mode <mode_number>"
  2726.                 SetupCustomVideoProfile = false
  2727.                 exit function
  2728.  
  2729.         end select
  2730.     end if
  2731.  
  2732.     ' Set video codec
  2733.     if g_strVideoCodec <> "" then
  2734.         intVideoCodecIndex = GetVideoCodecIndex(g_strVideoCodec)
  2735.         intFourCC = g_objProfile.EnumVideoCodec(intVideoCodecIndex, g_strVideoCodecName)
  2736.  
  2737.         objAudience.VideoCodec(0) = intVideoCodecIndex
  2738.     end if
  2739.  
  2740.     if g_intVideoBitrate <> -1 then
  2741.         objAudience.VideoBitrate(0) = g_intVideoBitrate
  2742.     end if
  2743.  
  2744.     if g_intVideoWidth <> -1 then
  2745.         objAudience.VideoWidth(0) = g_intVideoWidth
  2746.     end if
  2747.  
  2748.     if g_intVideoHeight <> -1 then
  2749.         objAudience.VideoHeight(0) = g_intVideoHeight
  2750.     end if
  2751.  
  2752.     if g_intVideoFramerate <> -1 then
  2753.         objAudience.VideoFPS(0) = g_intVideoFramerate
  2754.     end if
  2755.  
  2756.     if g_intVideoKeydist <> -1 then
  2757.         objAudience.VideoKeyFrameDistance(0) = g_intVideoKeydist
  2758.     end if
  2759.  
  2760.     if g_intVideoBuffer <> -1 then
  2761.         objAudience.VideoBufferSize(0) = g_intVideoBuffer
  2762.     end if
  2763.  
  2764.     ' For quality vbr mode use intSmoothness as VBR quality
  2765.     if g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_UNCONSTRAINED then
  2766.         if g_intVideoQuality <> -1 then
  2767.             objAudience.VideoCompressionQuality(0) = g_intVideoQuality
  2768.         end if
  2769.     else
  2770.         if g_intVideoQuality <> -1 then
  2771.             objAudience.VideoImageSharpness(0) = g_intVideoQuality
  2772.         end if
  2773.     end if
  2774.  
  2775.     ' For peak vbr mode set peakbitrate and peak buffer
  2776.     if g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_PEAK then
  2777.         if g_intVideoPeakBuffer <> -1 then
  2778.             objAudience.VideoBufferMax(0) = g_intVideoPeakBuffer
  2779.         end if
  2780.  
  2781.         if g_intVideoPeakBitrate <> -1 then
  2782.             if objAudience.VideoBitrate(0) > g_intVideoPeakBitrate then
  2783.                 objAudience.VideoBitrate(0) = g_intVideoPeakBitrate
  2784.             end if
  2785.             objAudience.VideoPeakBitrate(0) = g_intVideoPeakBitrate
  2786.         end if
  2787.     end if
  2788.  
  2789.     ' Setup video device conformance
  2790.     if g_strVideoDevConf <> "" then
  2791.         objAudience.Property( WMENC_VIDEO, 0, "DeviceConformanceTarget") = g_strVideoDevConf
  2792.     end if
  2793.  
  2794.     SetupCustomVideoProfile = true
  2795. end function
  2796.  
  2797.  
  2798. ' Load the default profile settings
  2799. function LoadProfileDefaults()
  2800.     dim argsArray
  2801.  
  2802.     ' Audio profile settings
  2803.     ' Set default codec and/or VBR mode when appropriate
  2804.     if g_strAudioSetting <> "" then
  2805.         argsArray = Split ( g_strAudioSetting, "_" )
  2806.         if UBound( argsArray ) = 3 and left(g_strAudioSetting, 4) <> "Q100" then
  2807.             g_strAudioCodec = WMA9PRO
  2808.         end if
  2809.     end if
  2810.  
  2811.     if g_intAudioVBRMode = -1 then
  2812.         g_intAudioVBRMode = 0
  2813.     end if
  2814.  
  2815.     if g_strAudioCodec = "" then
  2816.         g_strAudioCodec = "WMA9STD"
  2817.     end if
  2818.  
  2819.     if g_intAudioPeakBuffer = -1 then
  2820.         g_intAudioPeakBuffer = 3000
  2821.     end if
  2822.  
  2823.     ' Set default -a_setting based on format and mode
  2824.     if g_strAudioSetting = "" then
  2825.         if g_intAudioVBRMode = 2 and g_strAudioCodec = WMA9PRO then
  2826.             g_strAudioSetting = "Q75_44_2_24"
  2827.         elseif g_intAudioVBRMode = 2 and g_strAudioCodec = WMA9LSL then
  2828.             g_strAudioSetting = "Q100_44_2_16"
  2829.         elseif g_intAudioVBRMode = 2 then
  2830.             g_strAudioSetting = "Q75_44_2"
  2831.         elseif g_intAudioVBRMode = 0 and g_strAudioCodec = WMSPEECH then
  2832.             g_strAudioSetting = "12_16_1"
  2833.         elseif g_intAudioVBRMode = 0 and g_strAudioCodec = PCM then
  2834.             g_strAudioSetting = "705_22_2"
  2835.         elseif g_strAudioCodec = WMA9PRO then
  2836.             g_strAudioSetting = "128_44_2_24"
  2837.         else
  2838.             g_strAudioSetting = "64_44_2"
  2839.         end if
  2840.     end if
  2841.  
  2842.     ' Video profile settings
  2843.     if g_intVideoVBRMode = -1 then
  2844.         g_intVideoVBRMode = 0
  2845.     end if
  2846.  
  2847.     if g_strVideoCodec = "" then
  2848.         g_strVideoCodec = "WMV9"
  2849.     end if
  2850.  
  2851.     if g_intVideoBitrate = -1 then
  2852.         g_intVideoBitrate = 250000
  2853.     end if
  2854.  
  2855.     if g_intVideoWidth = -1 then
  2856.         g_intVideoWidth = 0
  2857.     end if
  2858.  
  2859.     if g_intVideoHeight = -1 then
  2860.         g_intVideoHeight = 0
  2861.     end if
  2862.  
  2863.     if g_intVideoKeydist = -1 then
  2864.         g_intVideoKeydist = 10000
  2865.     end if
  2866.  
  2867.     if g_intVideoBuffer = -1 then 
  2868.         g_intVideoBuffer = 5000
  2869.     end if
  2870.  
  2871.     if g_intVideoPeakBuffer = -1 then
  2872.         g_intVideoPeakBuffer = 5000
  2873.     end if
  2874.  
  2875.  
  2876.     if g_intVideoPeakBitrate = -1 then
  2877.         g_intVideoPeakBitrate = 1.5 * g_intVideoBitrate
  2878.     end if
  2879.  
  2880.     if g_intVideoQuality = -1 then
  2881.         if g_intVideoVBRMode = 2 then
  2882.             g_intVideoQuality = 95
  2883.         else
  2884.             g_intVideoQuality = 75
  2885.         end if
  2886.     end if
  2887. end function
  2888.  
  2889. ' Setup time configuration
  2890. function SetupTime()
  2891.     if g_blnDevice then
  2892.         ' Duration must be specified when capture from a live device.
  2893.         if g_intDuration = -1 then
  2894.             OutputInfo "Duration must be specified when capturing from devices."
  2895.             SetupTime = false
  2896.             exit function
  2897.         end if
  2898.     end if
  2899.  
  2900.     ' Setup markin and markout
  2901.     if g_intMarkInTime <> -1 then
  2902.         
  2903.         ' Set start time for audio source (mark in) if it has a audio stream.
  2904.         if not IsNull(g_objAudioSource) then
  2905.             g_objAudioSource.MarkIn = g_intMarkInTime
  2906.         end if
  2907.     
  2908.         ' Set start time for video source (mark in) if it has a video stream.
  2909.         if not IsNull(g_objVideoSource) then
  2910.             g_objVideoSource.MarkIn = g_intMarkInTime
  2911.         end if
  2912.     end if
  2913.  
  2914.     ' Is a mark out time provided?
  2915.     if g_intMarkOutTime <> -1 then
  2916.         
  2917.         ' Set end time for audio source (mark out) if it has a audio stream.
  2918.         if not IsNull(g_objAudioSource) then
  2919.             g_objAudioSource.MarkOut = g_intMarkOutTime
  2920.         end if
  2921.         
  2922.         ' Set end time for video source (mark out) if it has a video stream.
  2923.         if not IsNull(g_objVideoSource) then
  2924.             g_objVideoSource.MarkOut = g_intMarkOutTime
  2925.         end if
  2926.     end if
  2927.  
  2928.     SetupTime = true
  2929. end function
  2930.  
  2931. ' Transcode 
  2932. function Transcode()
  2933.     on error resume next
  2934.     
  2935.     ' Prepare to encode
  2936.     g_objEncoder.PrepareToEncode( true )
  2937.  
  2938.     ' Check if we got an error saying markout is greater that end of file. If so set markout to end of file
  2939.     if err.number = -1072882855 then
  2940.         err.Clear
  2941.  
  2942.         if not IsNull(g_objAudioSource) then
  2943.             g_objAudioSource.MarkOut = 0
  2944.         end if
  2945.         
  2946.         if not IsNull(g_objVideoSource) then
  2947.             g_objVideoSource.MarkOut = 0
  2948.         end if
  2949.  
  2950.         g_objEncoder.PrepareToEncode( true )
  2951.     elseif err.number <> 0 then
  2952.         Transcode = false
  2953.         OutputInfo "Prepare to encode failed with error " & err.Number & " " & err.Description
  2954.         exit function
  2955.     end if
  2956.  
  2957.     ' Start encoder
  2958.     g_intErrorCode = 0
  2959.     g_objEncoder.Start()
  2960.     if err.number <> 0 then
  2961.         Transcode = false
  2962.         OutputInfo "Start encoder failed with error " & err.Number & " " & err.Description
  2963.         exit function
  2964.     end if
  2965.  
  2966.     g_tStartTime = Now()
  2967.     
  2968.     ' Wait for start event
  2969.     while not g_blnEncoderStarted and g_intErrorCode = 0
  2970.         WScript.Sleep( 1000 )
  2971.     wend
  2972.  
  2973.     on error goto 0
  2974.     
  2975.     if g_intDuration >= 0 then
  2976.         ' Wait for time
  2977.         OutputInfo "Wait for " & g_intDuration & " seconds to stop encoder..."
  2978.  
  2979.         dim t1, t2
  2980.         
  2981.         t1 = Now()
  2982.  
  2983.         ' Wait until an error code is received
  2984.         do while g_intErrorCode = 0
  2985.             WScript.Sleep( 1000 )
  2986.  
  2987.             t2 = Now()
  2988.  
  2989.             if DateDiff( "s", t1, t2 ) >= g_intDuration then
  2990.                 OutputInfo "Duration time is reached. Stop encoder..."
  2991.                 g_objEncoder.Stop()
  2992.                 exit do
  2993.             end if
  2994.  
  2995.             if g_objEncoder.RunState = WMENC_ENCODER_STOPPED then
  2996.                 OutputInfo "Encoding completed before duration time is reached."
  2997.                 exit do
  2998.             end if
  2999.         loop
  3000.     else
  3001.         ShowProgress
  3002.     end if
  3003.  
  3004.     while not g_blnEncoderStopped and g_intErrorCode = 0
  3005.         WScript.Sleep( 1000 )
  3006.     wend
  3007.  
  3008.     ' Check error event
  3009.     if g_intErrorCode = 0 then
  3010.         OutputInfo "======== Encoding Completed ========"
  3011.         Transcode = true
  3012.     else
  3013.         OutputInfo "Error occurred in transcoding: Error Code = 0x" & Hex( g_intErrorCode )
  3014.         Transcode = false
  3015.     end if
  3016.  
  3017. end function
  3018.  
  3019. ' Show statistics information of output
  3020. function ShowStatistics()
  3021.     dim objProfile
  3022.  
  3023.     ' Output statistics for audio stream
  3024.     if not IsNull(g_objAudioSource) then
  3025.         dim objAudioStats
  3026.         
  3027.         set objAudioStats = g_objEncoder.Statistics.StreamOutputStats( WMENC_AUDIO, 0, 0 )
  3028.  
  3029.         OutputInfo ""
  3030.         OutputInfo "Audio :"
  3031.         OutputInfo vbTab & "Codec: " & g_strAudioCodecName
  3032.         if g_intAudioVBRMode <> 2 then
  3033.             OutputInfo vbTab & "Expected bit rate: " & vbTab & objAudioStats.ExpectedBitrate & " bps"
  3034.         end if
  3035.         OutputInfo vbTab & "Average bit rate: " & vbTab & objAudioStats.AverageBitrate & " bps"
  3036.         OutputInfo vbTab & "Expected sample rate: " & vbTab & objAudioStats.ExpectedSampleRate
  3037.         OutputInfo vbTab & "Average sample rate: " & vbTab & objAudioStats.AverageSampleRate & ""
  3038.         OutputInfo vbTab & "Dropped byte count: " & vbTab & objAudioStats.DroppedByteCount*10000 & " bytes"
  3039.         OutputInfo vbTab & "Dropped sample rate: " & vbTab & objAudioStats.DroppedSampleCount*10000 & ""
  3040.         OutputInfo vbTab & "Total bytes: " & vbTab & vbTab & objAudioStats.ByteCount*10000 & " bytes"
  3041.     end if
  3042.  
  3043.     if not IsNull(g_objVideoSource) then
  3044.         dim objVideoStats
  3045.         
  3046.         set objVideoStats = g_objEncoder.Statistics.StreamOutputStats( WMENC_VIDEO, 0, 0 )
  3047.  
  3048.         OutputInfo ""
  3049.         OutputInfo "Video :"
  3050.         OutputInfo vbTab & "Codec: " & g_strVideoCodecName
  3051.         if g_intVideoVBRMode <> 2 then
  3052.             OutputInfo vbTab & "Expected bit rate: " & vbTab & objVideoStats.ExpectedBitrate & " bps"
  3053.         end if
  3054.         OutputInfo vbTab & "Average bit rate: " & vbTab & objVideoStats.AverageBitrate & " bps"
  3055.         OutputInfo vbTab & "Expected fps: " & vbTab & vbTab & objVideoStats.ExpectedSampleRate / 1000
  3056.         OutputInfo vbTab & "Dropped frame count: " & vbTab & objVideoStats.DroppedSampleCount*10000 & ""
  3057.         OutputInfo vbTab & "Total coded frames: " & vbTab & objVideoStats.SampleCount*10000 & ""
  3058.         OutputInfo vbTab & "Average sample rate: " & vbTab & objVideoStats.AverageSampleRate / 1000 & ""
  3059.         OutputInfo vbTab & "Dropped bytes: " & vbTab & vbTab & objVideoStats.DroppedByteCount*10000 & " bytes"
  3060.         OutputInfo vbTab & "Total bytes: " & vbTab & vbTab & objVideoStats.ByteCount*10000 & " bytes"
  3061.     end if
  3062.  
  3063.     ' Output statistics information of output stream
  3064.     OutputInfo ""
  3065.     OutputInfo "Overall:"
  3066.     OutputInfo vbTab & "Encoding time: " & vbTab & vbTab & DateDiff( "s", g_tStartTime, g_tStopTime ) & " seconds"
  3067.     OutputInfo vbTab & "Average bit rate: " & vbTab & g_objEncoder.Statistics.WMFOutputStats.AverageBitrate & " bps"
  3068.     
  3069.     if g_strOutput <> "" then
  3070.         dim objFileStats
  3071.         
  3072.         set objFileStats = g_objEncoder.Statistics.FileArchiveStats
  3073.     
  3074.         OutputInfo vbTab & "File size: " & vbTab & vbTab & objFileStats.FileSize*10000 & " bytes "
  3075.         OutputInfo vbTab & "File duration: " & vbTab & vbTab & objFileStats.FileDuration*10 & " seconds "
  3076.     end if
  3077.  
  3078. end function
  3079.  
  3080. ' Setup input configuration
  3081. function SetupInput()
  3082.     dim strDeviceName
  3083.  
  3084.     ' The input file name is used if it is not empty, otherwise device index is used.
  3085.     if g_strInput <> "" then
  3086.         dim strInput2
  3087.         
  3088.         strInput2 = g_objFileSystem.GetAbsolutePathName( g_strInput )
  3089.  
  3090.         on error resume next
  3091.  
  3092.         if g_strProfile <> "" then
  3093.             dim strProfileName
  3094.  
  3095.             strProfileName = LCase( g_strProfile )
  3096.             if Left( strProfileName, 1) = "a" and Mid( strProfileName, 2, 1 ) <> "v"  then
  3097.                  g_blnAudioOnly = true
  3098.             elseif Left( strProfileName, 1) = "v" then
  3099.                 g_blnVideoOnly = true
  3100.             end if
  3101.         end if
  3102.  
  3103.         ' Add this file into the source group.
  3104.         if g_blnAudioOnly then
  3105.             set g_objAudioSource = g_objSourceGroup.AddSource( WMENC_AUDIO )
  3106.             g_objAudioSource.SetInput( strInput2 )
  3107.         elseif g_blnVideoOnly then
  3108.             set g_objVideoSource = g_objSourceGroup.AddSource( WMENC_VIDEO )
  3109.             g_objVideoSource.SetInput( strInput2 )
  3110.         else
  3111.             g_objSourceGroup.AutoSetFileSource( strInput2 )
  3112.  
  3113.             ' If source file has an auido stream, get the audio source.
  3114.             if g_objSourceGroup.SourceCount( WMENC_AUDIO ) > 0 then
  3115.                 set g_objAudioSource = g_objSourceGroup.Source( WMENC_AUDIO, 0 )
  3116.             end if
  3117.  
  3118.             ' If source file has a video stream, get the video source.
  3119.             if g_objSourceGroup.SourceCount( WMENC_VIDEO ) > 0 then
  3120.                 set g_objVideoSource = g_objSourceGroup.Source( WMENC_VIDEO, 0 )
  3121.             end if
  3122.  
  3123.         end if
  3124.     elseif g_intAudioDevice <> -1 or g_intVideoDevice <> -1 then
  3125.         if g_intAudioDevice <> -1 then
  3126.             strDeviceName = GetDeviceNameFromIndex( WMENC_AUDIO, g_intAudioDevice )
  3127.             if strDeviceName = "" then
  3128.                 OutputInfo "Error: Invalid audio device number specified" 
  3129.                 SetupInput = false
  3130.                 exit function
  3131.             end if
  3132.             set g_objAudioSource = g_objSourceGroup.AddSource( WMENC_AUDIO )
  3133.             g_objAudioSource.SetInput strDeviceName, "device"
  3134.         end if
  3135.  
  3136.         if g_intVideoDevice <> -1 then
  3137.             strDeviceName = GetDeviceNameFromIndex( WMENC_VIDEO, g_intVideoDevice )
  3138.             if strDeviceName = "" then
  3139.                 OutputInfo "Error: Invalid video device number specified" 
  3140.                 SetupInput = false
  3141.                 exit function
  3142.             end if
  3143.             
  3144.             set g_objVideoSource = g_objSourceGroup.AddSource( WMENC_VIDEO )
  3145.             g_objVideoSource.SetInput strDeviceName, "device"
  3146.         end if
  3147.         
  3148.     end if
  3149.  
  3150.     if g_objSourceGroup.SourceCount( WMENC_AUDIO ) and g_objSourceGroup.SourceCount( WMENC_VIDEO ) then
  3151.         g_intSessionType = WMENC_CONTENT_ONE_AUDIO_ONE_VIDEO
  3152.     elseif g_objSourceGroup.SourceCount( WMENC_AUDIO ) then
  3153.         g_intSessionType = WMENC_CONTENT_ONE_AUDIO
  3154.     elseif g_objSourceGroup.SourceCount( WMENC_VIDEO ) then
  3155.         g_intSessionType = WMENC_CONTENT_ONE_VIDEO
  3156.     end if
  3157.  
  3158.     ' Set audio setting for speech
  3159.     if not IsNull(g_objAudioSource) then
  3160.         SetupAudioSource()
  3161.     end if
  3162.  
  3163.     ' Set video settings
  3164.     if not IsNull(g_objVideoSource) then
  3165.         SetupVideoSource()
  3166.     end if
  3167.    
  3168.     if err.number <> 0 then
  3169.         OutputInfo "Error: 0x" & Hex(err.number) & " - " & err.description
  3170.         err.Clear
  3171.         SetupInput = false
  3172.         exit function
  3173.     end if
  3174.  
  3175.     SetupInput = true
  3176. end function
  3177.  
  3178. 'Set speech related settings on audio source
  3179. function SetupAudioSource()
  3180.     if g_intAudioSpeechContent <> -1 then
  3181.         g_objAudioSource.contentmode = g_intAudioSpeechContent
  3182.     end if
  3183.     if g_strAudioSpeechEdl <> "" then
  3184.         g_objAudioSource.contentedl = g_strAudioSpeechEdl
  3185.     end if
  3186. end function
  3187.  
  3188. 'Set settings on video source
  3189. function SetupVideoSource()
  3190.     ' Set video preprocess
  3191.     select case g_intVideoPreprocess
  3192.         case 0 
  3193.             g_objVideoSource.Optimization = WMENC_VIDEO_STANDARD
  3194.         case 1
  3195.             g_objVideoSource.Optimization = WMENC_VIDEO_DEINTERLACE
  3196.         case 2
  3197.             g_objVideoSource.Optimization = WMENC_VIDEO_DEINTERLACE
  3198.             OutputInfo "Preprocessing mode not supported. Use -height and -width to adjust video size."
  3199.         case 3
  3200.             g_objVideoSource.Optimization = WMENC_VIDEO_DEINTERLACE
  3201.             OutputInfo "Preprocessing mode not supported. Use -height and -width to adjust video size."
  3202.         case 4
  3203.             g_objVideoSource.Optimization = WMENC_VIDEO_DEINTERLACE
  3204.             OutputInfo "Preprocessing mode not supported. Use -height and -width to adjust video size."
  3205.         case 5
  3206.             g_objVideoSource.Optimization = WMENC_VIDEO_INVERSETELECINE
  3207.         case 6
  3208.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_AA_TOP
  3209.         case 7
  3210.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_BB_TOP
  3211.         case 8
  3212.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_BC_TOP
  3213.         case 9
  3214.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_CD_TOP
  3215.         case 10
  3216.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_DD_TOP
  3217.         case 11
  3218.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_AA_BOTTOM
  3219.         case 12
  3220.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_BB_BOTTOM
  3221.         case 13
  3222.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_BC_BOTTOM
  3223.         case 14
  3224.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_CD_BOTTOM
  3225.         case 15
  3226.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_DD_BOTTOM
  3227.         case 16
  3228.             g_objVideoSource.Optimization = WMENC_VIDEO_INTERLACED_AUTO
  3229.         case 17
  3230.             g_objVideoSource.Optimization = WMENC_VIDEO_INTERLACED_TOP_FIRST
  3231.         case 18
  3232.             g_objVideoSource.Optimization = WMENC_VIDEO_INTERLACED_BOTTOM_FIRST
  3233.     end select
  3234.  
  3235.     'Set pixelformat
  3236.     select case ucase( g_strPixelFormat )
  3237.         case "I420"
  3238.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_I420
  3239.         case "IYUV"
  3240.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_IYUV
  3241.         case "RGB24"
  3242.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB24
  3243.         case "RGB32"
  3244.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB32 
  3245.         case "RGB555"
  3246.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB555 
  3247.         case "RGB565"
  3248.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB565
  3249.         case "RGB8"
  3250.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB8
  3251.         case "UYVY"
  3252.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_UYVY
  3253.         case "YUY2"
  3254.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_YUY2
  3255.         case "YV12"
  3256.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_YV12 
  3257.         case "YVU9"
  3258.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_YVU9 
  3259.         case "YVYU"
  3260.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_YVYU 
  3261.     end select
  3262.  
  3263.     'Set pixel aspect ratio
  3264.     if g_intPixelAspectRatioX <> -1 then
  3265.         g_objVideoSource.PixelAspectRatioX = g_intPixelAspectRatioX
  3266.     end if
  3267.  
  3268.     if g_intPixelAspectRatioY <> -1 then
  3269.         g_objVideoSource.PixelAspectRatioY = g_intPixelAspectRatioY
  3270.     end if
  3271.  
  3272.  
  3273.     'Set performance
  3274.     if g_intVideoPerformance <> -1 then
  3275.         g_objEncoder.VideoComplexity = g_intVideoPerformance
  3276.     end if
  3277.  
  3278.     'Set clipping margins
  3279.     if g_intClipLeft <> -1 then
  3280.         g_objVideoSource.CroppingLeftMargin = g_intClipLeft
  3281.     end if
  3282.  
  3283.     if g_intClipRight <> -1 then
  3284.         g_objVideoSource.CroppingRightMargin = g_intClipRight
  3285.     end if
  3286.  
  3287.     if g_intClipTop <> -1 then
  3288.         g_objVideoSource.CroppingTopMargin = g_intClipTop
  3289.     end if
  3290.  
  3291.     if g_intClipBottom <> -1 then
  3292.         g_objVideoSource.CroppingBottomMargin = g_intClipBottom
  3293.     end if
  3294.  
  3295. end function
  3296.  
  3297. 'This function is used to check if the bit rate specified for the a_setting param is valid
  3298. function CheckForValidAudioBitRates( intBitRate )
  3299.  
  3300.     select case intBitRate
  3301.  
  3302.         case 1411200,768000,705600,640000,440000,384000,352800,320000,256000,192000,160000,128000,96000,80000,_
  3303.              64000,48000,40000,32000,22000,20000,17000,16000,12000,10000,8000,6000,5000,4000,0
  3304.             CheckForValidAudioBitRates = True
  3305.  
  3306.         case else
  3307.             CheckForValidAudioBitRates = False
  3308.  
  3309.     end select
  3310. end function
  3311.  
  3312. 'This function is used to check if the sampling rate specified for the a_setting param is valid
  3313. function CheckForValidAudioSamplingRates( intSamplingRate )
  3314.  
  3315.     select case intSamplingRate
  3316.  
  3317.         case 96000,88200,48000,44100,32000,22050,16000,11025,8000
  3318.             CheckForValidAudioSamplingRates = True
  3319.  
  3320.         case else
  3321.             CheckForValidAudioSamplingRates = False
  3322.  
  3323.     end select
  3324. end function
  3325.  
  3326. 'This function is used to check if the channel specified for the a_setting param is valid
  3327. function CheckForValidAudioChannel( intChannel )
  3328.  
  3329.     select case intChannel
  3330.  
  3331.         case 1,2,6,8
  3332.             CheckForValidAudioChannel = True
  3333.  
  3334.         case else
  3335.             CheckForValidAudioChannel = False
  3336.  
  3337.    end select
  3338. end function
  3339.  
  3340. 'This function is used to check if the depth specified for the a_setting param is valid
  3341. function CheckForValidDepth( intAudioDepth )
  3342.  
  3343.     select Case intAudioDepth
  3344.  
  3345.         case 16,20,24
  3346.             CheckForValidDepth = True 
  3347.  
  3348.         case else
  3349.             CheckForValidDepth = False
  3350.  
  3351.    end select 
  3352. end function
  3353.  
  3354. 'This function is the top level function for directory based encoding
  3355. function DoDirectoryModeEncoding()
  3356.     dim strInputFull
  3357.     dim strOutputFull
  3358.  
  3359.     if g_strOutput = "" then
  3360.         OutputInfo "Error: No output directory specified" 
  3361.         DoDirectoryModeEncoding = false
  3362.         exit function
  3363.     end if
  3364.  
  3365.     strInputFull = g_objFileSystem.GetAbsolutePathName(g_strInput)
  3366.     strOutputFull = g_objFileSystem.GetAbsolutePathName(g_strOutput)
  3367.  
  3368.     EncodeFilesInFolder strInputFull, strOutputFull
  3369.  
  3370. end function
  3371.  
  3372. 'This function will create all folders down to the strFolderName level
  3373. function CreateOutputFolder( strFolderName )
  3374.     if g_objFileSystem.FolderExists(strFolderName) = false then
  3375.         CreateOutputFolder( g_objFileSystem.GetParentFolderName( strFolderName ) )
  3376.         g_objFileSystem.CreateFolder( strFolderName )
  3377.         end if
  3378. end function
  3379.  
  3380. 'This function will encode all files in the input directory and generate output files in output directory
  3381. function EncodeFilesInFolder( strInputFolderName, strOutputFolderName )
  3382.     dim objSubFoldersCollection
  3383.     dim objInputSubFolder
  3384.     dim strOutputSubFolderName, strFileType
  3385.     dim objFile, objFolder, objFileCollection
  3386.  
  3387.     OutputInfo "============== Encoding Files in Folder ============== " & strInputFolderName
  3388.  
  3389.     set objFolder = g_objFileSystem.GetFolder( strInputFolderName )
  3390.     
  3391.     ' First encode all the files contained in the input folder
  3392.     set objFileCollection = objFolder.Files
  3393.  
  3394.     for each objFile in objFileCollection
  3395.  
  3396.         strFileType = right(objFile.name, len(objFile.name) - instrrev(objFile.name,".") )  
  3397.  
  3398.         select case lcase(strFileType)
  3399.             case "avi", "wav", "mpg", "mpeg", "vob" , "wmv" , "wma", "mp3", "asf"
  3400.                 g_strInput = strInputFolderName & "\" & objFile.name
  3401.                 g_strOutput = strOutputFolderName & "\" & Left(objFile.name, len(objFile.Name)-(len(objFile.name) - instrrev(objFile.name,".") + 1)) & g_strOutputString
  3402.  
  3403.                 OutputInfo "============== Input " & g_strInput & " " & g_strOutput
  3404.  
  3405.                 ' This will force wmcmd to append wmv/wma extension
  3406.                 g_strOutput = g_strOutput & "."
  3407.             
  3408.                 ' Encode files
  3409.                 if SetupEncoder() then
  3410.                     if Transcode() and not g_blnSilent then 
  3411.                         ShowStatistics()
  3412.                     end if 
  3413.                 end if
  3414.  
  3415.                 ' reset encoder states for next file 
  3416.                 g_objEncoder.PrepareToEncode( false )
  3417.                 g_objEncoder.SourceGroupCollection.Remove( "SG_1" )
  3418.                 g_objSourceGroup = Null
  3419.                 g_objAudioSource = Null
  3420.                 g_objVideoSource = Null
  3421.                 g_blnEncoderStarted = false
  3422.                 g_blnEncoderStopped = false
  3423.                 g_blnEndPreProcess = false
  3424.  
  3425.             case else
  3426.                 OutputInfo "Skipping: " & objFile.name
  3427.         end select
  3428.     next
  3429.  
  3430.     ' Then recurse into subfolders and encode all files there
  3431.     set objSubFoldersCollection = objFolder.SubFolders
  3432.  
  3433.     for each objInputSubFolder in objSubFoldersCollection
  3434.         strOutputSubFolderName = strOutputFolderName & "\" & objInputSubFolder.name
  3435.  
  3436.         EncodeFilesInFolder objInputSubFolder, strOutputSubFolderName
  3437.     Next
  3438.  
  3439. end function
  3440.  
  3441. ' Get device name from index
  3442. function GetDeviceNameFromIndex(enumMediaType, intDeviceIndex)
  3443.     dim intLastDevice
  3444.     dim objSourceInfo, objSourcePluginManager
  3445.  
  3446.     intLastDevice = 0
  3447.     set objSourcePlugInManager = g_objEncoder.SourcePlugInInfoManager
  3448.  
  3449.     for i = 0 to objSourcePlugInManager.count -1
  3450.         set objSourceInfo = objSourcePlugInManager.Item(i)
  3451.         
  3452.         if objSourceInfo.Resources = true then
  3453.             if enumMediaType = WMENC_AUDIO then ' Audio
  3454.                 ' For audio search audio and audio | video
  3455.                 if objSourceInfo.MediaType = 1 or objSourceInfo.MediaType = 3 then
  3456.                     if intDeviceIndex < intLastDevice + objSourceInfo.Count then
  3457.                         GetDeviceNameFromIndex = objSourceInfo( intDeviceIndex - intLastDevice )
  3458.                         exit function
  3459.                     else 
  3460.                         intLastDevice = intLastDevice + objSourceInfo.Count
  3461.                     end if
  3462.                 end if
  3463.             else ' Video
  3464.                 ' For video search video, audio | video and video | script
  3465.                 if objSourceInfo.MediaType = 2 or objSourceInfo.MediaType = 3 or objSourceInfo.MediaType = 6 then
  3466.                     if intDeviceIndex < intLastDevice + objSourceInfo.Count Then
  3467.                         GetDeviceNameFromIndex = objSourceInfo( intDeviceIndex - intLastDevice )
  3468.                         exit function
  3469.                     else 
  3470.                         intLastDevice = intLastDevice + objSourceInfo.Count
  3471.                     end if
  3472.                 end if
  3473.             end if
  3474.         end if
  3475.     next
  3476.  
  3477.     GetDeviceNameFromIndex = ""
  3478.  
  3479. end function
  3480.  
  3481. function ShowProgress()
  3482.     dim intSleepDuration, intPercent, intADuration, intVDuration, intDuration
  3483.     dim intPasses, intLimit
  3484.  
  3485.     intPasses = 1
  3486.  
  3487.     ' Compute number of passes required
  3488.     if not IsNull(g_objAudioSource) then
  3489.         if g_objAudioSource.PreProcessPass = 1 then
  3490.             intPasses = 2
  3491.         end if
  3492.     end if
  3493.  
  3494.     if not IsNull(g_objVideoSource) then
  3495.         if g_objVideoSource.PreProcessPass = 1 then
  3496.             intPasses = 2
  3497.         end if
  3498.     end if
  3499.  
  3500.     ' Compute file duration
  3501.     if not IsNull(g_objAudioSource) then
  3502.         if g_objAudioSource.MarkOut <> 0 then
  3503.             intADuration = g_objAudioSource.MarkOut - g_objAudioSource.MarkIn
  3504.         else
  3505.             intADuration = g_objAudioSource.Duration - g_objAudioSource.MarkIn
  3506.         end if
  3507.     end if
  3508.     if not IsNull(g_objVideoSource) then
  3509.         if g_objVideoSource.MarkOut <> 0 then
  3510.             intVDuration = g_objVideoSource.MarkOut - g_objVideoSource.MarkIn
  3511.         else
  3512.             intVDuration = g_objVideoSource.Duration - g_objVideoSource.MarkIn
  3513.         end if
  3514.     end if
  3515.  
  3516.     if intADuration > intVDuration then
  3517.         intDuration = intADuration
  3518.     else
  3519.         intDuration = intVDuration
  3520.     end if
  3521.  
  3522.     intSleepDuration = 2000
  3523.     
  3524.     ' For all passes show progress from 0 to 100
  3525.     for j=0 to intPasses-1
  3526.         intPercent = 0
  3527.  
  3528.         if intPasses = 2 and j = 0 then
  3529.             OutputInfo "======== Begin Pass1 ========"
  3530.         elseif intPasses = 2 and j = 1 then
  3531.             OutputInfo "======== Begin Pass2 ========"
  3532.         end if
  3533.     
  3534.         for i=1 to 4
  3535.             intLimit = 25 * i
  3536.             do while g_objEncoder.RunState <> WMENC_ENCODER_STOPPED and g_intErrorCode = 0 and intPercent < intLimit
  3537.                 WScript.stdout.Write "."
  3538.                 WScript.Sleep intSleepDuration
  3539.                 if intDuration <> 0 then
  3540.                     intPercent = Int( g_objEncoder.Statistics.EncodingTime * 1000000 / intDuration )
  3541.                 end if
  3542.                 if intPasses = 2 and j = 0 and intLimit = 100 and intPercent < 75 then
  3543.                     ' second pass has already started
  3544.                     exit Do
  3545.                 end if
  3546.             loop
  3547.         
  3548.             ' Only show progress if we know the duration of source files
  3549.             if intDuration <> 0 and g_intErrorCode = 0 then
  3550.                 WScript.stdout.Write intLimit &"%."
  3551.             end if
  3552.  
  3553.             if g_intErrorCode <> 0 then 
  3554.                 exit for
  3555.             end if
  3556.         next
  3557.  
  3558.         if j = 0 and intPasses = 2 then
  3559.             do while not g_blnEndPreProcess and g_intErrorCode = 0
  3560.                 WScript.Sleep intSleepDuration
  3561.             loop
  3562.         end if
  3563.  
  3564.         if g_intErrorCode <> 0 then 
  3565.             exit for
  3566.         end if
  3567.  
  3568.         OutputInfo ""
  3569.     next
  3570.  
  3571. end function
  3572.